bsg-lib.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * BSG helper library
  3. *
  4. * Copyright (C) 2008 James Smart, Emulex Corporation
  5. * Copyright (C) 2011 Red Hat, Inc. All rights reserved.
  6. * Copyright (C) 2011 Mike Christie
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. *
  22. */
  23. #ifndef _BLK_BSG_
  24. #define _BLK_BSG_
  25. #include <linux/blkdev.h>
  26. struct request;
  27. struct device;
  28. struct scatterlist;
  29. struct request_queue;
  30. struct bsg_buffer {
  31. unsigned int payload_len;
  32. int sg_cnt;
  33. struct scatterlist *sg_list;
  34. };
  35. struct bsg_job {
  36. struct device *dev;
  37. struct request *req;
  38. /* Transport/driver specific request/reply structs */
  39. void *request;
  40. void *reply;
  41. unsigned int request_len;
  42. unsigned int reply_len;
  43. /*
  44. * On entry : reply_len indicates the buffer size allocated for
  45. * the reply.
  46. *
  47. * Upon completion : the message handler must set reply_len
  48. * to indicates the size of the reply to be returned to the
  49. * caller.
  50. */
  51. /* DMA payloads for the request/response */
  52. struct bsg_buffer request_payload;
  53. struct bsg_buffer reply_payload;
  54. void *dd_data; /* Used for driver-specific storage */
  55. };
  56. void bsg_job_done(struct bsg_job *job, int result,
  57. unsigned int reply_payload_rcv_len);
  58. int bsg_setup_queue(struct device *dev, struct request_queue *q, char *name,
  59. bsg_job_fn *job_fn, int dd_job_size);
  60. void bsg_request_fn(struct request_queue *q);
  61. #endif