abcio.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #ifndef ABCIO_H
  2. #define ABCIO_H
  3. #include <stddef.h>
  4. #include <stdint.h>
  5. struct abc_dev {
  6. uint8_t *out_buf;
  7. size_t out_cnt;
  8. const uint8_t *inp_buf;
  9. size_t inp_cnt;
  10. uint16_t callback_mask;
  11. uint8_t status_first_out_mask;
  12. uint8_t status_first_inp_mask;
  13. uint8_t out_data[6]; /* [1] is devsel, all 8 bits */
  14. union {
  15. struct {
  16. uint8_t inp_data[2];
  17. uint8_t inp_en;
  18. uint8_t inp_data_def; /* inp_data[0] when no queue active */
  19. };
  20. uint32_t inp_data_w;
  21. };
  22. void (*callback_out)(struct abc_dev *, uint8_t data);
  23. void (*callback_inp)(struct abc_dev *);
  24. void (*callback_cmd)(struct abc_dev *, uint8_t data, uint8_t addr);
  25. void (*callback_status)(struct abc_dev *);
  26. };
  27. void abc_setup_out_queue(struct abc_dev *dev, void *buf, size_t len,
  28. uint8_t status);
  29. void abc_setup_inp_queue(struct abc_dev *dev, const void *buf, size_t len,
  30. uint8_t status);
  31. void abc_set_inp_default(struct abc_dev *dev, uint8_t val);
  32. void abc_set_inp_status(struct abc_dev *dev, uint8_t val);
  33. void abc_register(struct abc_dev *dev, unsigned int devsel);
  34. void abc_init(void);
  35. void abcdisk_init(void);
  36. void abcdisk_io_poll(void);
  37. void abc_init_memmap(void);
  38. #endif /* ABCIO_H */