XenevaOS
Loading...
Searching...
No Matches
Macros | Functions | Variables
audrv.c File Reference
#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>
Include dependency graph for audrv.c:

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.
 
AuDriverAuCreateDriverInstance (char *drivername)
 AuCreateDriverInstance – creates a new driver slot.
 
AuDriverAuCreateBootDriverInstance (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 AuDriverLoad (char *filename, AuDriver *driver)
 AuDriverLoad – Manage and loads dll drivers.
 
bool AuIsPCIeInitialized ()
 
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

AuDriverdrivers [246]
 
AuDriverbootDrivers [10]
 
AuDeviceau_devices [AU_MAX_SUPPORTED_DEVICE]
 
uint64_tscratchBuffer
 

Detailed Description

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:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

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.

Macro Definition Documentation

◆ AU_DRIVER_BASE_START

#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

◆ AU_MAX_SUPPORTED_DEVICE

#define AU_MAX_SUPPORTED_DEVICE   256

Function Documentation

◆ AuBootDriverInitialise()

AU_EXTERN AU_EXPORT void AuBootDriverInitialise ( KERNEL_BOOT_INFO info)

AuBootDriverInitialise – Initialise and load all boot time drivers.

Parameters
info– Kernel boot information passed by XNLDR [TODO] : Everything is hard coded for now

◆ AuBootDriverLoad()

void AuBootDriverLoad ( void *  driverBuffer,
AuDriver driver 
)

AuBootDriverLoad – loads all boot drivers.

Parameters
driverBuffer- Pointer to driver location in memory
driver– Pointer to aurora driver structure

◆ AuCheckDevice()

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.

Parameters
classC– class code of the device to check
subclassC– sub class code of the device to check
progIF– programming interface of the device

◆ AuCreateBootDriverInstance()

AuDriver * AuCreateBootDriverInstance ( char *  drivername)

AuCreateDriverInstance – creates a new driver slot.

Parameters
drivername– name of the driver

◆ AuCreateDriverInstance()

AuDriver * AuCreateDriverInstance ( char *  drivername)

AuCreateDriverInstance – creates a new driver slot.

Parameters
drivername– name of the driver

◆ AuDecreaseDriverCount()

void AuDecreaseDriverCount ( )

AuDecreaseDriverCount – decrease the number of device count.

◆ AuDriverLoad()

void AuDriverLoad ( char *  filename,
AuDriver driver 
)

AuDriverLoad – Manage and loads dll drivers.

Parameters
filename– file path
driver– driver instance

◆ AuDrvMgrGetBaseAddress()

uint64_t AuDrvMgrGetBaseAddress ( )

AuDrvMgrGetBaseAddress – returns the current driver load base address.

◆ AuDrvMgrSetBaseAddress()

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.

◆ AuDrvMngrInitialize()

void AuDrvMngrInitialize ( KERNEL_BOOT_INFO info)

AuDrvMngrInitialize – Initialize the driver manager.

Parameters
info– kernel boot info

◆ AuGetConfEntry()

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.

Parameters
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()

void AuGetDriverName ( uint32_t  vendor_id,
uint32_t  device_id,
uint8_t buffer,
int  entryoff 
)

AuGetDriverName – Extract the driver path from its entry offset.

Parameters
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

◆ AuIncreaseDriverCount()

void AuIncreaseDriverCount ( )

AuIncreaseDriverCount – increase the number of device count.

◆ AuIsPCIeInitialized()

bool AuIsPCIeInitialized ( )
extern

◆ AuRegisterDevice()

AU_EXTERN AU_EXPORT void AuRegisterDevice ( AuDevice dev)

AuRegisterDevice – register a new device to aurora system.

Parameters
dev– Pointer to device to add

◆ AuRequestBootDriverId()

uint32_t AuRequestBootDriverId ( )

◆ AuRequestDriverId()

uint32_t AuRequestDriverId ( )

request an unique id for driver class

Variable Documentation

◆ au_devices

◆ bootDrivers

AuDriver* bootDrivers[10]

◆ drivers

AuDriver* drivers[246]

◆ scratchBuffer

uint64_t* scratchBuffer