1 /* (c) 2008, Zheng Cui <cuizheng@cs.unm.edu> */
2 /* (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> */
3 /* (c) 2008, The V3VEE Project <http://www.v3vee.org> */
5 #ifndef __DEVICES_CDROM_H_
6 #define __DEVICES_CDROM_H_
8 #include <devices/ramdisk.h>
9 #include <devices/ide.h>
10 #include <palacios/vmm_types.h>
15 struct cdrom_interface;
19 void (*init)(struct cdrom_interface *cdrom);
22 * Load CD-ROM. Returns false if CD is not ready.
24 rd_bool (*insert_cdrom)(struct cdrom_interface *cdrom, char *dev /*= NULL*/);
27 * Logically eject the CD.
29 void (*eject_cdrom)(struct cdrom_interface *cdrom);
32 * Read CD TOC. Returns false if start track is out of bounds.
34 rd_bool (*read_toc)(struct cdrom_interface * cdrom, uint8_t * buf, int* length, rd_bool msf, int start_track);
37 * Return CD-ROM capacity (in 2048 byte frames)
39 uint32_t (*capacity)(struct cdrom_interface *cdrom);
42 * Read a single block from the CD
44 void (*read_block)(struct cdrom_interface *cdrom, uint8_t* buf, int lba);
47 * Start (spin up) the CD.
49 int (*start_cdrom)(struct cdrom_interface *cdrom);
53 struct cdrom_interface {
57 ulong_t fd; //memory address
59 ulong_t head; //current position
63 char *path; //for ramdisk, NULL
67 void init_cdrom(struct cdrom_interface *cdrom);