geode: DEV_GET_POS call

git-svn-id: svn://kolibrios.org@1692 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2010-11-07 12:38:26 +00:00
parent 20515d609d
commit f189914288
4 changed files with 91 additions and 23 deletions

View File

@ -0,0 +1,56 @@
OUTPUT_FORMAT(pei-i386)
ENTRY("_drvEntry")
SECTIONS
{
. = SIZEOF_HEADERS;
. = ALIGN(__section_alignment__);
.text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
{
*(.text) *(.rdata)
}
.data ALIGN(__section_alignment__) :
{
*(.data)
}
.bss ALIGN(__section_alignment__):
{
*(.bss)
*(COMMON)
}
/DISCARD/ :
{
*(.debug$S)
*(.debug$T)
*(.debug$F)
*(.drectve)
*(.edata)
}
.idata ALIGN(__section_alignment__):
{
SORT(*)(.idata$2)
SORT(*)(.idata$3)
/* These zeroes mark the end of the import list. */
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
SORT(*)(.idata$4)
SORT(*)(.idata$5)
SORT(*)(.idata$6)
SORT(*)(.idata$7)
}
.reloc ALIGN(__section_alignment__) :
{
*(.reloc)
}
}

View File

@ -2,20 +2,13 @@
#define FORCED_PIO #define FORCED_PIO
#include "types.h" #include <ddk.h>
#include "pci.h" #include "pci.h"
#include "syscall.h" #include <syscall.h>
#include "geode.h" #include "geode.h"
#define DEBUG
#ifdef DEBUG
#define DBG(format,...) dbgprintf(format,##__VA_ARGS__) #define DBG(format,...) dbgprintf(format,##__VA_ARGS__)
#else
#define DBG(format,...)
#endif
#define BM0_IRQ 0x04 #define BM0_IRQ 0x04
#define BM1_IRQ 0x08 #define BM1_IRQ 0x08
@ -470,7 +463,7 @@ Bool FindPciDevice()
}; };
u32_t __stdcall drvEntry(int action) u32_t drvEntry(int action, char *cmdline)
{ {
u32_t retval; u32_t retval;
@ -479,17 +472,15 @@ u32_t __stdcall drvEntry(int action)
if(action != 1) if(action != 1)
return 0; return 0;
#ifdef DEBUG
if(!dbg_open("/rd/1/drivers/geode.log")) if(!dbg_open("/rd/1/drivers/geode.log"))
{ {
printf("Can't open /rd/1/drivers/geode.log\nExit\n"); printf("Can't open /rd/1/drivers/geode.log\nExit\n");
return 0; return 0;
} }
#endif
if( FindPciDevice() == FALSE) if( FindPciDevice() == FALSE)
{ {
DBG("Device not found\n"); dbgprintf("Device not found\n");
return 0; return 0;
}; };
@ -516,7 +507,7 @@ u32_t __stdcall drvEntry(int action)
#define DEV_SET_MASTERVOL 6 #define DEV_SET_MASTERVOL 6
#define DEV_GET_MASTERVOL 7 #define DEV_GET_MASTERVOL 7
#define DEV_GET_INFO 8 #define DEV_GET_INFO 8
#define DEV_GET_POS 9
int __stdcall srv_sound(ioctl_t *io) int __stdcall srv_sound(ioctl_t *io)
{ {
@ -551,6 +542,14 @@ int __stdcall srv_sound(ioctl_t *io)
} }
break; break;
case DEV_GET_POS:
if(io->out_size==4)
{
*outp = ctrl_read_32(0x60)>>2;
return 0;
}
break;
default: default:
return ERR_PARAM; return ERR_PARAM;
}; };

View File

@ -2,14 +2,23 @@
CC = gcc CC = gcc
FASM = e:/fasm/fasm.exe FASM = e:/fasm/fasm.exe
CFLAGS = -c -O2 -fomit-frame-pointer -fno-builtin-printf CFLAGS = -c -O2 -fomit-frame-pointer -fno-builtin-printf
LDRHD = -shared -T ld.x -s --file-alignment 32 LDFLAGS = -nostdlib -shared -s -Map usb.map --image-base 0\
--file-alignment 512 --section-alignment 4096
INCLUDES = -I ../../include DEFINES = -D__KERNEL__ -DCONFIG_X86_32
HFILES:= ../../include/types.h \ DRV_TOPDIR = $(CURDIR)/../..
../../include/syscall.h \
../../include/pci.h \ DRV_INCLUDES = $(DRV_TOPDIR)/include
geode.h
INCLUDES = -I$(DRV_INCLUDES) \
-I$(DRV_INCLUDES)/linux
LIBPATH = $(DRV_TOPDIR)/ddk
LIBS:= -lddk -lcore
HFILES:= geode.h
SRC_DEP:= SRC_DEP:=
GEODE_SRC:= amd_geode.h GEODE_SRC:= amd_geode.h
@ -20,11 +29,11 @@ GEODE:= geode.dll
all: $(GEODE) all: $(GEODE)
$(GEODE): geode.obj $(SRC_DEP) $(HFILES) Makefile $(GEODE): geode.obj $(SRC_DEP) $(HFILES) Makefile
wlink name $(GEODE) SYS nt_dll lib libdrv op offset=0 op nod op maxe=25 op el op STUB=stub.exe op START=_drvEntry @$(NAME).lk ld $(LDFLAGS) -L$(LIBPATH) -T driver.lds -o $@ geode.obj $(LIBS)
kpack.exe geode.dll geode.drv kpack.exe geode.dll geode.drv
geode.obj : geode.c $(SRC_DEP) $(HFILES) Makefile geode.obj : geode.c $(SRC_DEP) $(HFILES) Makefile
$(CC) $(INCLUDES) $(CFLAGS) -o geode.obj geode.c $(CC) $(DEFINES) $(INCLUDES) $(CFLAGS) -o geode.obj geode.c

View File

@ -1,4 +1,8 @@
typedef int Bool;
#define TRUE 1
#define FALSE 0
#pragma pack(push, 1) #pragma pack(push, 1)
typedef struct typedef struct