|
XenevaOS
|
#include <audrv.h>#include <Mm\pmmngr.h>#include <Mm\vmmngr.h>#include <string.h>#include <pe.h>#include <stdio.h>#include <Mm\kmalloc.h>#include <pcie.h>#include <aucon.h>
Macros | |
| #define | AU_DRIVER_BASE_START 0xFFFFC00000A00000 |
| 0xFFFFC00000400000 - 0xFFFFC00000A00000 – Kernel Boot Drivers 0xFFFFC00000A00000 - Kernel Runtime Drivers | |
| #define | AU_MAX_SUPPORTED_DEVICE 256 |
Functions | |
| uint32_t | AuRequestDriverId () |
| request an unique id for driver class | |
| uint32_t | AuRequestBootDriverId () |
| void | AuDecreaseDriverCount () |
| AuDecreaseDriverCount – decrease the number of device count. | |
| void | AuIncreaseDriverCount () |
| AuIncreaseDriverCount – increase the number of device count. | |
| char * | AuGetConfEntry (uint32_t vendor_id, uint32_t device_id, uint8_t *buffer, int entryoff) |
| AuGetConfEntry – Get an entry offset in the file for required device. | |
| AuDriver * | AuCreateDriverInstance (char *drivername) |
| AuCreateDriverInstance – creates a new driver slot. | |
| AuDriver * | AuCreateBootDriverInstance (char *drivername) |
| AuCreateDriverInstance – creates a new driver slot. | |
| void | AuGetDriverName (uint32_t vendor_id, uint32_t device_id, uint8_t *buffer, int entryoff) |
| AuGetDriverName – Extract the driver path from its entry offset. | |
| void | AuBoardIterateModule (uint8_t *board, int moduleCount) |
| AuBoardIterateModule – iterate all modules present in board config file. | |
| void | AuDriverLoad (char *filename, AuDriver *driver) |
| AuDriverLoad – Manage and loads dll drivers. | |
| bool | AuIsPCIeInitialized () |
| int | FontManagerGetFontCount (uint8_t *buffer) |
| FontManagerGetFontCount – returns number of font counts. | |
| void | AuDrvMngrInitialize (KERNEL_BOOT_INFO *info) |
| AuDrvMngrInitialize – Initialize the driver manager. | |
| AU_EXTERN AU_EXPORT void | AuRegisterDevice (AuDevice *dev) |
| AuRegisterDevice – register a new device to aurora system. | |
| AU_EXTERN AU_EXPORT bool | AuCheckDevice (uint16_t classC, uint16_t subclassC, uint8_t progIF) |
| AuCheckDevice – checks an aurora device if it's already present. | |
| void | AuBootDriverLoad (void *driverBuffer, AuDriver *driver) |
| AuBootDriverLoad – loads all boot drivers. | |
| AU_EXTERN AU_EXPORT void | AuBootDriverInitialise (KERNEL_BOOT_INFO *info) |
| AuBootDriverInitialise – Initialise and load all boot time drivers. | |
| uint64_t | AuDrvMgrGetBaseAddress () |
| AuDrvMgrGetBaseAddress – returns the current driver load base address. | |
| void | AuDrvMgrSetBaseAddress (uint64_t base_address) |
| AuDrvMgrSetBaseAddress – sets a new base address for driver to load it's highly risky because, if we set it to kernel stack location, kernel will crash. | |
Variables | |
| AuDriver * | drivers [246] |
| AuDriver * | bootDrivers [10] |
| AuDevice * | au_devices [AU_MAX_SUPPORTED_DEVICE] |
| uint64_t * | scratchBuffer |
BSD 2-Clause License
Copyright (c) 2022-2023, Manas Kamal Choudhury All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
| #define AU_DRIVER_BASE_START 0xFFFFC00000A00000 |
0xFFFFC00000400000 - 0xFFFFC00000A00000 – Kernel Boot Drivers 0xFFFFC00000A00000 - Kernel Runtime Drivers
@TODO: Implement UEFI based pcie discovery mechanism and fix AuBootDriverLoad
| #define AU_MAX_SUPPORTED_DEVICE 256 |
| void AuBoardIterateModule | ( | uint8_t * | board, |
| int | moduleCount | ||
| ) |
AuBoardIterateModule – iterate all modules present in board config file.
| board | – pointer to board config buffer |
| moduleCount | – total number of module described |
| AU_EXTERN AU_EXPORT void AuBootDriverInitialise | ( | KERNEL_BOOT_INFO * | info | ) |
AuBootDriverInitialise – Initialise and load all boot time drivers.
| info | – Kernel boot information passed by XNLDR [TODO] : Everything is hard coded for now |
| void AuBootDriverLoad | ( | void * | driverBuffer, |
| AuDriver * | driver | ||
| ) |
AuBootDriverLoad – loads all boot drivers.
| driverBuffer | - Pointer to driver location in memory |
| driver | – Pointer to aurora driver structure |
AuCheckDevice – checks an aurora device if it's already present.
| classC | – class code of the device to check |
| subclassC | – sub class code of the device to check |
| progIF | – programming interface of the device |
| AuDriver * AuCreateBootDriverInstance | ( | char * | drivername | ) |
AuCreateDriverInstance – creates a new driver slot.
| drivername | – name of the driver |
| AuDriver * AuCreateDriverInstance | ( | char * | drivername | ) |
AuCreateDriverInstance – creates a new driver slot.
| drivername | – name of the driver |
| void AuDecreaseDriverCount | ( | ) |
AuDecreaseDriverCount – decrease the number of device count.
| void AuDriverLoad | ( | char * | filename, |
| AuDriver * | driver | ||
| ) |
AuDriverLoad – Manage and loads dll drivers.
| filename | – file path |
| driver | – driver instance |
| uint64_t AuDrvMgrGetBaseAddress | ( | ) |
AuDrvMgrGetBaseAddress – returns the current driver load base address.
| void AuDrvMgrSetBaseAddress | ( | uint64_t | base_address | ) |
AuDrvMgrSetBaseAddress – sets a new base address for driver to load it's highly risky because, if we set it to kernel stack location, kernel will crash.
| void AuDrvMngrInitialize | ( | KERNEL_BOOT_INFO * | info | ) |
AuDrvMngrInitialize – Initialize the driver manager.
| info | – kernel boot info |
now initialize board specific driver list
using font manager's function because both board config data and font manager config data shares same style
AuGetConfEntry – Get an entry offset in the file for required device.
| vendor_id | – vendor id of the product |
| device_id | – device id of the product |
| buffer | – configuration file buffer |
| entryoff | – entry offset from where search begins |
AuGetDriverName – Extract the driver path from its entry offset.
| vendor_id | – vendor id of the product |
| device_id | – device id of the product |
| buffer | – configuration file buffer |
| entryoff | – entry offset from where search begins |
| void AuIncreaseDriverCount | ( | ) |
AuIncreaseDriverCount – increase the number of device count.
|
extern |
AuRegisterDevice – register a new device to aurora system.
| dev | – Pointer to device to add |
| uint32_t AuRequestBootDriverId | ( | ) |
| uint32_t AuRequestDriverId | ( | ) |
request an unique id for driver class
|
extern |
FontManagerGetFontCount – returns number of font counts.
we're using FontManagerGetFontCount because both board config descriptor file and font config file share same writing style
| fontlst | – font list buffer |
| AuDevice* au_devices[AU_MAX_SUPPORTED_DEVICE] |
| AuDriver* bootDrivers[10] |
| AuDriver* drivers[246] |
| uint64_t* scratchBuffer |