Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/mps/mps.c
Show First 20 Lines • Show All 1,514 Lines • ▼ Show 20 Lines | return (ENOMEM); | ||||
} | } | ||||
/* | /* | ||||
* SMID 0 cannot be used as a free command per the firmware spec. | * SMID 0 cannot be used as a free command per the firmware spec. | ||||
* Just drop that command instead of risking accounting bugs. | * Just drop that command instead of risking accounting bugs. | ||||
*/ | */ | ||||
sc->commands = malloc(sizeof(struct mps_command) * sc->num_reqs, | sc->commands = malloc(sizeof(struct mps_command) * sc->num_reqs, | ||||
M_MPT2, M_WAITOK | M_ZERO); | M_MPT2, M_WAITOK | M_ZERO); | ||||
if(!sc->commands) { | |||||
mps_dprint(sc, MPS_ERROR, "Cannot allocate command memory\n"); | |||||
return (ENOMEM); | |||||
} | |||||
for (i = 1; i < sc->num_reqs; i++) { | for (i = 1; i < sc->num_reqs; i++) { | ||||
cm = &sc->commands[i]; | cm = &sc->commands[i]; | ||||
cm->cm_req = sc->req_frames + i * sc->reqframesz; | cm->cm_req = sc->req_frames + i * sc->reqframesz; | ||||
cm->cm_req_busaddr = sc->req_busaddr + i * sc->reqframesz; | cm->cm_req_busaddr = sc->req_busaddr + i * sc->reqframesz; | ||||
cm->cm_sense = &sc->sense_frames[i]; | cm->cm_sense = &sc->sense_frames[i]; | ||||
cm->cm_sense_busaddr = sc->sense_busaddr + i * MPS_SENSE_LEN; | cm->cm_sense_busaddr = sc->sense_busaddr + i * MPS_SENSE_LEN; | ||||
cm->cm_desc.Default.SMID = i; | cm->cm_desc.Default.SMID = i; | ||||
cm->cm_sc = sc; | cm->cm_sc = sc; | ||||
▲ Show 20 Lines • Show All 1,058 Lines • ▼ Show 20 Lines | |||||
int | int | ||||
mps_register_events(struct mps_softc *sc, u32 *mask, | mps_register_events(struct mps_softc *sc, u32 *mask, | ||||
mps_evt_callback_t *cb, void *data, struct mps_event_handle **handle) | mps_evt_callback_t *cb, void *data, struct mps_event_handle **handle) | ||||
{ | { | ||||
struct mps_event_handle *eh; | struct mps_event_handle *eh; | ||||
int error = 0; | int error = 0; | ||||
eh = malloc(sizeof(struct mps_event_handle), M_MPT2, M_WAITOK|M_ZERO); | eh = malloc(sizeof(struct mps_event_handle), M_MPT2, M_WAITOK|M_ZERO); | ||||
if(!eh) { | |||||
mps_dprint(sc, MPS_ERROR, "Cannot allocate event memory\n"); | |||||
return (ENOMEM); | |||||
} | |||||
eh->callback = cb; | eh->callback = cb; | ||||
eh->data = data; | eh->data = data; | ||||
TAILQ_INSERT_TAIL(&sc->event_list, eh, eh_list); | TAILQ_INSERT_TAIL(&sc->event_list, eh, eh_list); | ||||
if (mask != NULL) | if (mask != NULL) | ||||
error = mps_update_events(sc, eh, mask); | error = mps_update_events(sc, eh, mask); | ||||
*handle = eh; | *handle = eh; | ||||
return (error); | return (error); | ||||
▲ Show 20 Lines • Show All 669 Lines • Show Last 20 Lines |