00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00069 #include "StdAfx.h"
00070 #include "DiskController.h"
00071 #include "Disk.h"
00072
00073 CDiskController::CDiskController(CConfigurator* cfg, CSystem* c, int pcibus,
00074 int pcidev, int num_busses, int num_devices) : CPCIDevice(cfg, c, pcibus, pcidev)
00075 {
00076 num_bus = num_busses;
00077 num_dev = num_devices;
00078
00079 disks = (CDisk**) calloc(num_bus * num_dev, sizeof(CDisk *));
00080 }
00081
00082 CDiskController::~CDiskController(void)
00083 {
00084 free(disks);
00085 }
00086
00087 void CDiskController::register_disk(class CDisk* dsk, int bus, int dev)
00088 {
00089 if(bus >= num_bus)
00090 FAILURE(Configuration, "Can't register disk: bus number out of range");
00091 if(dev >= num_dev)
00092 FAILURE(Configuration, "Can't register disk: device number out of range");
00093
00094 disks[bus * num_bus + dev] = dsk;
00095 }
00096
00097 class CDisk* CDiskController::get_disk(int bus, int dev)
00098 {
00099 if(bus >= num_bus)
00100 return 0;
00101 if(dev >= num_dev)
00102 return 0;
00103
00104 return disks[bus * num_bus + dev];
00105 }