devtab.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Stub.
  3. */
  4. #include "u.h"
  5. #include "../port/lib.h"
  6. #include "mem.h"
  7. #include "dat.h"
  8. #include "fns.h"
  9. #include "../port/error.h"
  10. extern Dev* devtab[];
  11. void
  12. devtabreset(void)
  13. {
  14. int i;
  15. for(i = 0; devtab[i] != nil; i++) {
  16. if (devtab[i]->reset == nil)
  17. panic("corrupt memory: nil devtab[%d]->reset", i);
  18. devtab[i]->reset();
  19. }
  20. }
  21. void
  22. devtabinit(void)
  23. {
  24. int i;
  25. for(i = 0; devtab[i] != nil; i++)
  26. devtab[i]->init();
  27. }
  28. void
  29. devtabshutdown(void)
  30. {
  31. int i;
  32. /*
  33. * Shutdown in reverse order.
  34. */
  35. for(i = 0; devtab[i] != nil; i++)
  36. ;
  37. for(i--; i >= 0; i--)
  38. devtab[i]->shutdown();
  39. }
  40. Dev*
  41. devtabget(int dc, int user)
  42. {
  43. int i;
  44. for(i = 0; devtab[i] != nil; i++){
  45. if(devtab[i]->dc == dc)
  46. return devtab[i];
  47. }
  48. if(user == 0)
  49. panic("devtabget %C\n", dc);
  50. return nil;
  51. }
  52. long
  53. devtabread(Chan*, void* buf, long n, vlong off)
  54. {
  55. int i;
  56. Dev *dev;
  57. char *alloc, *e, *p;
  58. alloc = malloc(READSTR);
  59. if(alloc == nil)
  60. error(Enomem);
  61. p = alloc;
  62. e = p + READSTR;
  63. for(i = 0; devtab[i] != nil; i++){
  64. dev = devtab[i];
  65. p = seprint(p, e, "#%C %s\n", dev->dc, dev->name);
  66. }
  67. if(waserror()){
  68. free(alloc);
  69. nexterror();
  70. }
  71. n = readstr(off, buf, n, alloc);
  72. free(alloc);
  73. poperror();
  74. return n;
  75. }