int cam_devq_init(struct cam_devq *devq, int devices, int openings) { bzero(devq, sizeof(*devq)); if (camq_init(&devq->alloc_queue, devices) != 0) { return (1); } if (camq_init(&devq->send_queue, devices) != 0) { camq_fini(&devq->alloc_queue); return (1); } devq->alloc_openings = openings; devq->alloc_active = 0; devq->send_openings = openings; devq->send_active = 0; return (0); }
int cam_ccbq_init(struct cam_ccbq *ccbq, int openings) { bzero(ccbq, sizeof(*ccbq)); if (camq_init(&ccbq->queue, openings + (CAM_RL_VALUES - 1)) != 0) return (1); ccbq->devq_openings = openings; ccbq->dev_openings = openings; return (0); }
int cam_ccbq_init(struct cam_ccbq *ccbq, int openings) { bzero(ccbq, sizeof(*ccbq)); if (camq_init(&ccbq->queue, imax(64, 1 << fls(openings + openings / 2))) != 0) return (1); ccbq->total_openings = openings; ccbq->dev_openings = openings; return (0); }
int cam_devq_init(struct cam_devq *devq, int devices, int openings) { bzero(devq, sizeof(*devq)); mtx_init(&devq->send_mtx, "CAM queue lock", NULL, MTX_DEF); if (camq_init(&devq->send_queue, devices) != 0) return (1); devq->send_openings = openings; devq->send_active = 0; return (0); }
struct camq * camq_alloc(int size) { struct camq *camq; camq = (struct camq *)malloc(sizeof(*camq), M_CAMQ, M_NOWAIT); if (camq != NULL) { if (camq_init(camq, size) != 0) { free(camq, M_CAMQ); camq = NULL; } } return (camq); }