Lines Matching defs:cd

163 static void print_ddcb_info(struct genwqe_dev *cd, struct ddcb_queue *queue)
168 struct pci_dev *pci_dev = cd->pci_dev;
170 spin_lock_irqsave(&cd->print_lock, flags);
174 cd->card_idx, queue->ddcb_act, queue->ddcb_next);
190 spin_unlock_irqrestore(&cd->print_lock, flags);
229 * @cd: pointer to genwqe device descriptor
241 static int ddcb_requ_finished(struct genwqe_dev *cd, struct ddcb_requ *req)
244 (cd->card_state != GENWQE_CARD_USED);
251 * @cd: pointer to genwqe device descriptor
265 static int enqueue_ddcb(struct genwqe_dev *cd, struct ddcb_queue *queue,
312 __genwqe_writeq(cd, queue->IO_QUEUE_OFFSET, num); /* start queue */
360 * @cd: pointer to genwqe device descriptor
365 static int genwqe_check_ddcb_queue(struct genwqe_dev *cd,
370 struct pci_dev *pci_dev = cd->pci_dev;
410 errcnts = __genwqe_readq(cd, queue->IO_QUEUE_ERRCNTS);
411 status = __genwqe_readq(cd, queue->IO_QUEUE_STATUS);
462 * @cd: pointer to genwqe device descriptor
477 int __genwqe_wait_ddcb(struct genwqe_dev *cd, struct ddcb_requ *req)
482 struct pci_dev *pci_dev = cd->pci_dev;
496 ddcb_requ_finished(cd, req),
514 genwqe_check_ddcb_queue(cd, req->queue);
515 if (ddcb_requ_finished(cd, req))
524 __genwqe_readq(cd, queue->IO_QUEUE_STATUS));
529 print_ddcb_info(cd, req->queue);
547 if (cd->card_state != GENWQE_CARD_USED) {
558 * @cd: pointer to genwqe device descriptor
567 static struct ddcb *get_next_ddcb(struct genwqe_dev *cd,
607 * @cd: genwqe device descriptor
620 int __genwqe_purge_ddcb(struct genwqe_dev *cd, struct ddcb_requ *req)
626 struct pci_dev *pci_dev = cd->pci_dev;
710 queue_status = __genwqe_readq(cd, queue->IO_QUEUE_STATUS);
720 print_ddcb_info(cd, req->queue);
725 int genwqe_init_debug_data(struct genwqe_dev *cd, struct genwqe_debug_data *d)
728 struct pci_dev *pci_dev = cd->pci_dev;
739 d->slu_unitcfg = cd->slu_unitcfg;
740 d->app_unitcfg = cd->app_unitcfg;
746 * @cd: pointer to genwqe device descriptor
754 int __genwqe_enqueue_ddcb(struct genwqe_dev *cd, struct ddcb_requ *req,
760 struct pci_dev *pci_dev = cd->pci_dev;
764 if (cd->card_state != GENWQE_CARD_USED) {
772 queue = req->queue = &cd->queue;
778 genwqe_check_ddcb_queue(cd, queue);
787 pddcb = get_next_ddcb(cd, queue, &req->num); /* get ptr and num */
832 if ((cd->slu_unitcfg & 0xFFFF0ull) > 0x34199ull)
855 if (genwqe_get_slu_id(cd) <= 0x2) {
887 genwqe_init_debug_data(cd, &req->debug_data);
892 enqueue_ddcb(cd, queue, pddcb, req->num);
900 wake_up_interruptible(&cd->queue_waitq);
907 * @cd: pointer to genwqe device descriptor
911 int __genwqe_execute_raw_ddcb(struct genwqe_dev *cd,
916 struct pci_dev *pci_dev = cd->pci_dev;
929 rc = __genwqe_enqueue_ddcb(cd, req, f_flags);
933 rc = __genwqe_wait_ddcb(cd, req);
959 __genwqe_purge_ddcb(cd, req);
973 * @cd: pointer to genwqe device descriptor
977 static int genwqe_next_ddcb_ready(struct genwqe_dev *cd)
981 struct ddcb_queue *queue = &cd->queue;
1002 * @cd: pointer to genwqe device descriptor
1008 int genwqe_ddcbs_in_flight(struct genwqe_dev *cd)
1012 struct ddcb_queue *queue = &cd->queue;
1021 static int setup_ddcb_queue(struct genwqe_dev *cd, struct ddcb_queue *queue)
1027 struct pci_dev *pci_dev = cd->pci_dev;
1042 queue->ddcb_vaddr = __genwqe_alloc_consistent(cd, queue_size,
1080 __genwqe_writeq(cd, queue->IO_QUEUE_CONFIG, 0x07); /* iCRC/vCRC */
1081 __genwqe_writeq(cd, queue->IO_QUEUE_SEGMENT, queue->ddcb_daddr);
1082 __genwqe_writeq(cd, queue->IO_QUEUE_INITSQN, queue->ddcb_seq);
1083 __genwqe_writeq(cd, queue->IO_QUEUE_WRAP, val64);
1090 __genwqe_free_consistent(cd, queue_size, queue->ddcb_vaddr,
1103 static void free_ddcb_queue(struct genwqe_dev *cd, struct ddcb_queue *queue)
1113 __genwqe_free_consistent(cd, queue_size, queue->ddcb_vaddr,
1123 struct genwqe_dev *cd = (struct genwqe_dev *)dev_id;
1124 struct pci_dev *pci_dev = cd->pci_dev;
1130 cd->irqs_processed++;
1131 wake_up_interruptible(&cd->queue_waitq);
1137 gfir = __genwqe_readq(cd, IO_SLC_CFGREG_GFIR);
1141 if (cd->use_platform_recovery) {
1147 readq(cd->mmio + IO_SLC_CFGREG_GFIR);
1154 wake_up_interruptible(&cd->health_waitq);
1171 struct genwqe_dev *cd = (struct genwqe_dev *)dev_id;
1173 cd->irqs_processed++;
1174 wake_up_interruptible(&cd->queue_waitq);
1191 struct genwqe_dev *cd = (struct genwqe_dev *)data;
1195 genwqe_check_ddcb_queue(cd, &cd->queue);
1199 cd->queue_waitq,
1200 genwqe_ddcbs_in_flight(cd) ||
1204 cd->queue_waitq,
1205 genwqe_next_ddcb_ready(cd) ||
1222 * @cd: pointer to genwqe device descriptor
1228 int genwqe_setup_service_layer(struct genwqe_dev *cd)
1232 struct pci_dev *pci_dev = cd->pci_dev;
1234 if (genwqe_is_privileged(cd)) {
1235 rc = genwqe_card_reset(cd);
1241 genwqe_read_softreset(cd);
1244 queue = &cd->queue;
1255 rc = setup_ddcb_queue(cd, queue);
1261 init_waitqueue_head(&cd->queue_waitq);
1262 cd->card_thread = kthread_run(genwqe_card_thread, cd,
1264 cd->card_idx);
1265 if (IS_ERR(cd->card_thread)) {
1266 rc = PTR_ERR(cd->card_thread);
1267 cd->card_thread = NULL;
1271 rc = genwqe_set_interrupt_capability(cd, GENWQE_MSI_IRQS);
1280 init_waitqueue_head(&cd->health_waitq);
1282 if (genwqe_is_privileged(cd)) {
1284 GENWQE_DEVNAME, cd);
1287 GENWQE_DEVNAME, cd);
1294 cd->card_state = GENWQE_CARD_USED;
1298 genwqe_reset_interrupt_capability(cd);
1300 kthread_stop(cd->card_thread);
1301 cd->card_thread = NULL;
1303 free_ddcb_queue(cd, queue);
1310 * @cd: pointer to genwqe device descriptor
1316 static int queue_wake_up_all(struct genwqe_dev *cd)
1320 struct ddcb_queue *queue = &cd->queue;
1335 * @cd: pointer to genwqe device descriptor
1342 int genwqe_finish_queue(struct genwqe_dev *cd)
1346 struct pci_dev *pci_dev = cd->pci_dev;
1347 struct ddcb_queue *queue = &cd->queue;
1353 if (cd->card_state == GENWQE_CARD_USED)
1354 cd->card_state = GENWQE_CARD_UNUSED;
1358 queue_wake_up_all(cd);
1362 in_flight = genwqe_ddcbs_in_flight(cd);
1390 * @cd: genwqe device descriptor
1394 int genwqe_release_service_layer(struct genwqe_dev *cd)
1396 struct pci_dev *pci_dev = cd->pci_dev;
1398 if (!ddcb_queue_initialized(&cd->queue))
1401 free_irq(pci_dev->irq, cd);
1402 genwqe_reset_interrupt_capability(cd);
1404 if (cd->card_thread != NULL) {
1405 kthread_stop(cd->card_thread);
1406 cd->card_thread = NULL;
1409 free_ddcb_queue(cd, &cd->queue);