5 static struct chardev
*devs
[MAX_CHARDEV_MAJOR
+ 1];
7 void chardev_init(void)
10 for (i
= 0; i
<= MAX_CHARDEV_MAJOR
; ++i
){
15 ssize_t
chardev_read(struct chardev
*d
, void *buf
, size_t len
)
17 return d
->functab
->read(d
, buf
, len
);
20 ssize_t
chardev_write(struct chardev
*d
, const void *buf
, size_t len
)
22 return d
->functab
->write(d
, buf
, len
);
25 int chardev_register(struct chardev
*cdev
)
27 int major
= cdev
->major
;
29 devs
[major
]->prev
= cdev
;
33 cdev
->next
= devs
[major
];
38 int chardev_unregister(struct chardev
*cdev
)
40 int major
= cdev
->major
;
42 *(cdev
->prev
? &cdev
->prev
->next
: &devs
[major
])
46 cdev
->next
->prev
= cdev
->prev
;
49 cdev
->prev
= cdev
->next
= NULL
;
53 struct chardev
*chardev_get(int major
, int minor
)
57 while (cdev
&& cdev
->minor
!= minor
){