• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/scsi/megaraid/

Lines Matching refs:kioc

108 	uioc_t		*kioc;
163 * if any previous kioc had timedout on this controller.
173 * The following call will block till a kioc is available
175 kioc = mraid_mm_alloc_kioc(adp);
180 if ((rval = mimd_to_kioc(argp, adp, kioc))) {
181 mraid_mm_dealloc_kioc(adp, kioc);
185 kioc->done = ioctl_done;
189 * release the kioc if and only if it was _not_ timedout. If it was
192 if ((rval = lld_ioctl(adp, kioc))) {
194 if (!kioc->timedout)
195 mraid_mm_dealloc_kioc(adp, kioc);
201 * Convert the kioc back to user space
203 rval = kioc_to_mimd(kioc, argp);
206 * Return the kioc to free pool
208 mraid_mm_dealloc_kioc(adp, kioc);
329 * @kioc : kernel space new format IOCTL
337 mimd_to_kioc(mimd_t __user *umimd, mraid_mmadp_t *adp, uioc_t *kioc)
364 kioc->adapno = adapno;
365 kioc->mb_type = MBOX_LEGACY;
366 kioc->app_type = APPTYPE_MIMD;
374 kioc->opcode = GET_ADAP_INFO;
375 kioc->data_dir = UIOC_RD;
376 kioc->xferlen = sizeof(mraid_hba_info_t);
378 if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
391 kioc->opcode = MBOX_CMD;
392 kioc->xferlen = mimd.ui.fcs.length;
393 kioc->user_data_len = kioc->xferlen;
394 kioc->user_data = mimd.ui.fcs.buffer;
396 if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
399 if (mimd.outlen) kioc->data_dir = UIOC_RD;
400 if (mimd.inlen) kioc->data_dir |= UIOC_WR;
406 kioc->opcode = MBOX_CMD;
407 kioc->xferlen = (mimd.outlen > mimd.inlen) ?
409 kioc->user_data_len = kioc->xferlen;
410 kioc->user_data = mimd.data;
412 if (mraid_mm_attach_buf(adp, kioc, kioc->xferlen))
415 if (mimd.outlen) kioc->data_dir = UIOC_RD;
416 if (mimd.inlen) kioc->data_dir |= UIOC_WR;
433 mbox64 = (mbox64_t *)((unsigned long)kioc->cmdbuf);
439 mbox->xferaddr = (uint32_t)kioc->buf_paddr;
441 if (kioc->data_dir & UIOC_WR) {
442 if (copy_from_user(kioc->buf_vaddr, kioc->user_data,
443 kioc->xferlen)) {
457 pthru32 = kioc->pthru32;
458 kioc->user_pthru = &umimd->pthru;
459 mbox->xferaddr = (uint32_t)kioc->pthru32_h;
461 if (copy_from_user(pthru32, kioc->user_pthru,
466 pthru32->dataxferaddr = kioc->buf_paddr;
467 if (kioc->data_dir & UIOC_WR) {
468 if (copy_from_user(kioc->buf_vaddr, kioc->user_data,
480 * @kioc : kioc that the buffer needs to be attached to
489 mraid_mm_attach_buf(mraid_mmadp_t *adp, uioc_t *kioc, int xferlen)
496 kioc->pool_index = -1;
497 kioc->buf_vaddr = NULL;
498 kioc->buf_paddr = 0;
499 kioc->free_buf = 0;
521 kioc->pool_index = i;
522 kioc->buf_vaddr = pool->vaddr;
523 kioc->buf_paddr = pool->paddr;
548 kioc->pool_index = right_pool;
549 kioc->free_buf = 1;
550 kioc->buf_vaddr = pci_pool_alloc(pool->handle, GFP_KERNEL,
551 &kioc->buf_paddr);
554 if (!kioc->buf_vaddr)
564 * The kioc_semaphore is initialized with number of kioc nodes in the
565 * free kioc pool. If the kioc pool is empty, this function blocks till
566 * a kioc becomes free.
571 uioc_t *kioc;
585 con_log(CL_ANN, ("megaraid cmm: kioc list empty!\n"));
589 kioc = list_entry(head->next, uioc_t, list);
590 list_del_init(&kioc->list);
594 memset((caddr_t)(unsigned long)kioc->cmdbuf, 0, sizeof(mbox64_t));
595 memset((caddr_t) kioc->pthru32, 0, sizeof(mraid_passthru_t));
597 kioc->buf_vaddr = NULL;
598 kioc->buf_paddr = 0;
599 kioc->pool_index =-1;
600 kioc->free_buf = 0;
601 kioc->user_data = NULL;
602 kioc->user_data_len = 0;
603 kioc->user_pthru = NULL;
604 kioc->timedout = 0;
606 return kioc;
610 * mraid_mm_dealloc_kioc - Return kioc to free pool
612 * @kioc : uioc_t node to be returned to free pool
615 mraid_mm_dealloc_kioc(mraid_mmadp_t *adp, uioc_t *kioc)
620 if (kioc->pool_index != -1) {
621 pool = &adp->dma_pool_list[kioc->pool_index];
633 if (kioc->free_buf == 1)
634 pci_pool_free(pool->handle, kioc->buf_vaddr,
635 kioc->buf_paddr);
642 /* Return the kioc to the free pool */
644 list_add(&kioc->list, &adp->kioc_pool);
647 /* increment the free kioc count */
656 * @kioc : The ioctl packet with kernel addresses
659 lld_ioctl(mraid_mmadp_t *adp, uioc_t *kioc)
665 kioc->status = -ENODATA;
666 rval = adp->issue_uioc(adp->drvr_data, kioc, IOCTL_ISSUE);
678 tp->data = (unsigned long)kioc;
688 wait_event(wait_q, (kioc->status != -ENODATA));
697 if (kioc->timedout) {
701 return kioc->status;
707 * @kioc : completed ioctl packet
710 ioctl_done(uioc_t *kioc)
717 * When the kioc returns from driver, make sure it still doesn't
721 if (kioc->status == -ENODATA) {
725 kioc->status = -EINVAL;
729 * Check if this kioc was timedout before. If so, nobody is waiting
730 * on this kioc. We don't have to wake up anybody. Instead, we just
731 * have to free the kioc
733 if (kioc->timedout) {
736 adapno = kioc->adapno;
745 kioc->timedout = 0;
748 mraid_mm_dealloc_kioc( adapter, kioc );
764 uioc_t *kioc = (uioc_t *)ptr;
766 kioc->status = -ETIME;
767 kioc->timedout = 1;
777 * @kioc : Kernel space IOCTL packet (successfully issued)
781 kioc_to_mimd(uioc_t *kioc, mimd_t __user *mimd)
806 kioc->buf_vaddr;
822 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf;
824 if (kioc->user_pthru) {
826 upthru32 = kioc->user_pthru;
827 kpthru32 = kioc->pthru32;
836 if (kioc->user_data) {
837 if (copy_to_user(kioc->user_data, kioc->buf_vaddr,
838 kioc->user_data_len)) {
885 uioc_t *kioc;
945 kioc = adapter->kioc_list + i;
946 kioc->cmdbuf = (uint64_t)(unsigned long)(mbox_list + i);
947 kioc->pthru32 = pci_pool_alloc(adapter->pthru_dma_pool,
948 GFP_KERNEL, &kioc->pthru32_h);
950 if (!kioc->pthru32) {
961 list_add_tail(&kioc->list, &adapter->kioc_pool);
981 kioc = adapter->kioc_list + i;
982 if (kioc->pthru32) {
983 pci_pool_free(adapter->pthru_dma_pool, kioc->pthru32,
984 kioc->pthru32_h);
1131 uioc_t *kioc;
1138 kioc = adp->kioc_list + i;
1140 pci_pool_free(adp->pthru_dma_pool, kioc->pthru32,
1141 kioc->pthru32_h);