iotrack.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. typedef struct MLock MLock;
  2. typedef struct Iosect Iosect;
  3. typedef struct Iotrack Iotrack;
  4. typedef struct Track Track;
  5. typedef struct Xfs Xfs;
  6. struct MLock
  7. {
  8. char key;
  9. };
  10. struct Iosect
  11. {
  12. Iosect *next;
  13. short flags;
  14. MLock lock;
  15. Iotrack *t;
  16. uchar * iobuf;
  17. };
  18. struct Iotrack
  19. {
  20. short flags;
  21. Xfs * xf;
  22. long addr;
  23. Iotrack *next; /* in lru list */
  24. Iotrack *prev;
  25. Iotrack *hnext; /* in hash list */
  26. Iotrack *hprev;
  27. MLock lock;
  28. int ref;
  29. Track *tp;
  30. };
  31. enum{
  32. Sectorsize = 512,
  33. Sect2trk = 9,
  34. Trksize = Sectorsize*Sect2trk
  35. };
  36. struct Track
  37. {
  38. Iosect *p[Sect2trk];
  39. uchar buf[Sect2trk][Sectorsize];
  40. };
  41. #define BMOD (1<<0)
  42. #define BIMM (1<<1)
  43. #define BSTALE (1<<2)
  44. Iosect* getiosect(Xfs*, long, int);
  45. Iosect* getosect(Xfs*, long);
  46. Iosect* getsect(Xfs*, long);
  47. Iosect* newsect(void);
  48. Iotrack* getiotrack(Xfs*, long);
  49. int canmlock(MLock*);
  50. int devcheck(Xfs*);
  51. int devread(Xfs*, long, void*, long);
  52. int devwrite(Xfs*, long, void*, long);
  53. int tread(Iotrack*);
  54. int twrite(Iotrack*);
  55. void freesect(Iosect*);
  56. void iotrack_init(void);
  57. void mlock(MLock*);
  58. void purgebuf(Xfs*);
  59. void purgetrack(Iotrack*);
  60. void putsect(Iosect*);
  61. void sync(void);
  62. void unmlock(MLock*);