summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/madge/driver/sys_mem.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/ndis/madge/driver/sys_mem.c925
1 files changed, 925 insertions, 0 deletions
diff --git a/private/ntos/ndis/madge/driver/sys_mem.c b/private/ntos/ndis/madge/driver/sys_mem.c
new file mode 100644
index 000000000..f72beb7bc
--- /dev/null
+++ b/private/ntos/ndis/madge/driver/sys_mem.c
@@ -0,0 +1,925 @@
+/****************************************************************************
+*
+* SYS_MEM.C
+*
+* FastMAC Plus based NDIS3 miniport driver. This module contains helper
+* routines used by the FTK to perform I/O access to adapters.
+*
+* Copyright (c) Madge Networks Ltd 1991-1994
+*
+* COMPANY CONFIDENTIAL
+*
+* Created: MF
+* Major modifications: PBA 21/06/1994
+*
+****************************************************************************/
+
+#include <ndis.h>
+
+#include "ftk_defs.h"
+#include "ftk_extr.h"
+
+#include "ndismod.h"
+
+/*--------------------------------------------------------------------------
+|
+| Note: These I/O routines are more involved that I would have liked for
+| two reasons. We cannot use uncooked raw I/O routines because our
+| EISA adapters use two ranges of I/O locations which could have some
+| other device in between them. Also we cannot turn these functions into
+| macros because the FTK expects sys_ins{b|w} to return a value but the
+| Ndis take a pointer to a memory cell for the value read.
+|
+--------------------------------------------------------------------------*/
+
+/***************************************************************************
+*
+* Function - sys_insw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* input_location -> I/O location to be read.
+*
+* Purpose - Read a word from an I/O location.
+*
+* Returns - The word read.
+*
+***************************************************************************/
+
+WORD
+sys_insw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+ WORD word_data;
+
+#ifdef _M_IX86
+
+ NdisRawReadPortUshort((ULONG) input_location, &word_data);
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawReadPortUshort(port, &word_data);
+
+#endif
+
+ return word_data;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_insb
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* input_location -> I/O location to be read.
+*
+* Purpose - Read a byte from an I/O location.
+*
+* Returns - The byte read.
+*
+***************************************************************************/
+
+BYTE
+sys_insb(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+ BYTE byte_data;
+
+#ifdef _M_IX86
+
+ NdisRawReadPortUchar((ULONG) input_location, &byte_data);
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawReadPortUchar(port, &byte_data);
+
+#endif
+
+ return byte_data;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_outsw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be written.
+* output_word -> The word to be written.
+*
+* Purpose - Write a word to an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_outsw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD output_location,
+ WORD output_word
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawWritePortUshort((ULONG) output_location, output_word);
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) output_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) output_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) output_location - ndisAdap->IoLocation2);
+
+ NdisRawWritePortUshort(port, output_word);
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_outsb
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be written.
+* output_byte -> The byte to be written.
+*
+* Purpose - Write a byte to an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_outsb(
+ ADAPTER_HANDLE adapter_handle,
+ WORD output_location,
+ BYTE output_byte
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawWritePortUchar((ULONG) output_location, output_byte);
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) output_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) output_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) output_location - ndisAdap->IoLocation2);
+
+ NdisRawWritePortUchar(port, output_byte);
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_insw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be read.
+* destination_address -> Destination for the data read.
+* length_in_words -> Number of words to read.
+*
+* Purpose - Read a number of words from an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_insw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * destination_address,
+ WORD length_in_words
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawReadPortBufferUshort(
+ (ULONG) input_location,
+ (USHORT *) destination_address,
+ (ULONG) length_in_words
+ );
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawReadPortBufferUshort(
+ port,
+ (USHORT *) destination_address,
+ (ULONG) length_in_words
+ );
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_outsw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be written.
+* source_address -> Address of the data to be written.
+* length_in_words -> Number of words to read.
+*
+* Purpose - Write a number of words to an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_outsw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * source_address,
+ WORD length_in_words
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawWritePortBufferUshort(
+ (ULONG) input_location,
+ (USHORT *) source_address,
+ (ULONG) length_in_words
+ );
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawWritePortBufferUshort(
+ port,
+ (USHORT *) source_address,
+ (ULONG) length_in_words
+ );
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_swap_insw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be read.
+* destination_address -> Destination for the data read.
+* length_in_words -> Number of words to read.
+*
+* Purpose - Read a number of byte swapped words from an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_swap_insw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * destination_address,
+ WORD length_in_words
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+ USHORT word_data;
+ WORD * ptr;
+
+ ptr = (WORD *) destination_address;
+
+#ifdef _M_IX86
+
+ while (length_in_words > 0)
+ {
+ NdisRawReadPortUshort((ULONG) input_location, &word_data);
+ *ptr = ((WORD) word_data << 8) | ((WORD) word_data >> 8);
+
+ ptr++;
+ length_in_words--;
+ }
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ while (length_in_words > 0)
+ {
+ NdisRawReadPortUshort(port, &word_data);
+ *ptr = ((WORD) word_data << 8) | ((WORD) word_data >> 8);
+
+ ptr++;
+ length_in_words--;
+ }
+
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_swap_outsw
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be written.
+* source_address -> Address of the data to be written.
+* length_in_words -> Number of words to read.
+*
+* Purpose - Write a number of byte swapped words to an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_swap_outsw(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * source_address,
+ WORD length_in_words
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+ USHORT word_data;
+ WORD * ptr;
+
+ ptr = (WORD *) source_address;
+
+#ifdef _M_IX86
+
+ while (length_in_words > 0)
+ {
+ word_data = (USHORT) (*ptr << 8) | (*ptr >> 8);
+ NdisRawWritePortUshort((ULONG) input_location, word_data);
+
+ ptr++;
+ length_in_words--;
+ }
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ while (length_in_words > 0)
+ {
+ word_data = (USHORT) (*ptr << 8) | (*ptr >> 8);
+ NdisRawWritePortUshort(port, word_data);
+
+ ptr++;
+ length_in_words--;
+ }
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_insd
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be read.
+* destination_address -> Destination for the data read.
+* length_in_dwords -> Number of dwords to read.
+*
+* Purpose - Read a number of dwords from an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_insd(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * destination_address,
+ WORD length_in_dwords
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawReadPortBufferUlong(
+ (ULONG) input_location,
+ (USHORT *) destination_address,
+ (ULONG) length_in_dwords
+ );
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawReadPortBufferUlong(
+ port,
+ (ULONG *) destination_address,
+ (ULONG) length_in_dwords
+ );
+
+#endif
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_outsd
+*
+* Parameters - adapter_handle -> FTK adapter handle.
+* output_location -> I/O location to be written.
+* source_address -> Address of the data to be written.
+* length_in_dwords -> Number of dwords to read.
+*
+* Purpose - Write a number of dwords to an I/O location.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_outsd(
+ ADAPTER_HANDLE adapter_handle,
+ WORD input_location,
+ BYTE * source_address,
+ WORD length_in_dwords
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+ ULONG port;
+
+#ifdef _M_IX86
+
+ NdisRawWritePortBufferUlong(
+ (ULONG) input_location,
+ (USHORT *) source_address,
+ (ULONG) length_in_dwords
+ );
+
+#else
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+ port = ((UINT) input_location <= ndisAdap->IORange1End)
+ ? (ULONG) ndisAdap->MappedIOLocation1 +
+ ((UINT) input_location - ndisAdap->IoLocation1)
+ : (ULONG) ndisAdap->MappedIOLocation2 +
+ ((UINT) input_location - ndisAdap->IoLocation2);
+
+ NdisRawWritePortBufferUlong(
+ port,
+ (ULONG *) source_address,
+ (ULONG) length_in_dwords
+ );
+
+#endif
+}
+
+/***************************************************************************
+*
+* Function - sys_sync_with_interrupt
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* f -> Function to call.
+* ptr -> Argument for f.
+*
+* Purpose - Call a function in such as way that its execution will
+* never overlap with the ISR.
+*
+* Returns - The return value from *f.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_sync_with_interrupt(
+ ADAPTER_HANDLE adapter_handle,
+ WBOOLEAN (*f)(void *),
+ void * ptr
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ return NdisMSynchronizeWithInterrupt(
+ &ndisAdap->Interrupt,
+ (void *) f,
+ ptr
+ );
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_movsd_to
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* SourcePtr -> Pointer to the source data.
+* DestPtr -> pointer to the destination.
+* TransferSize -> Number of bytes to transfer.
+*
+* Purpose - Transfer data to a memory mapped device. Although bytes
+* are given as the transfer size a whole number of
+* DWORDS are transferred.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_movsd_to(
+ ADAPTER_HANDLE adapter_handle,
+ DWORD SourcePtr,
+ DWORD DestPtr,
+ WORD TransferSize
+ )
+{
+ NdisMoveToMappedMemory(
+ (VOID *) DestPtr,
+ (VOID *) SourcePtr,
+ (ULONG) TransferSize
+ );
+}
+
+
+/***************************************************************************
+*
+* Function - sys_rep_movsd_from
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* SourcePtr -> Pointer to the source data.
+* DestPtr -> pointer to the destination.
+* TransferSize -> Number of bytes to transfer.
+*
+* Purpose - Transfer data from a memory mapped device. Although bytes
+* are given as the transfer size a whole number of
+* DWORDS are transferred.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_rep_movsd_from(
+ ADAPTER_HANDLE adapter_handle,
+ DWORD SourcePtr,
+ DWORD DestPtr,
+ WORD TransferSize
+ )
+{
+ NdisMoveFromMappedMemory(
+ (VOID *) DestPtr,
+ (VOID *) SourcePtr,
+ (ULONG) TransferSize
+ );
+}
+
+
+/***************************************************************************
+*
+* Function - sys_movsd_to
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* SourcePtr -> Pointer to the source data.
+* DestPtr -> pointer to the destination.
+*
+* Purpose - Transfer a DWORD of data to a memory mapped device.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_movsd_to(
+ ADAPTER_HANDLE adapter_handle,
+ DWORD SourcePtr,
+ DWORD DestPtr
+ )
+{
+ *((DWORD *) DestPtr) = *((DWORD *) SourcePtr);
+}
+
+
+/***************************************************************************
+*
+* Function - sys_movsd_from
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* SourcePtr -> Pointer to the source data.
+* DestPtr -> pointer to the destination.
+*
+* Purpose - Transfer a DWORD of data from a memory mapped device.
+*
+* Returns - Nothing.
+*
+***************************************************************************/
+
+void
+sys_movsd_from(
+ ADAPTER_HANDLE adapter_handle,
+ DWORD SourcePtr,
+ DWORD DestPtr
+ )
+{
+ *((DWORD *) DestPtr) = *((DWORD *) SourcePtr);
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_read_config_dword
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space from
+* which to read.
+* dword_ptr -> Buffer for the data read.
+*
+* Purpose - Read a DWORD from PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_read_config_dword(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ DWORD * dword_ptr
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisReadPciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) dword_ptr,
+ 4
+ );
+
+ return TRUE;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_read_config_word
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space from
+* which to read.
+* word_ptr -> Buffer for the data read.
+*
+* Purpose - Read a WORD from PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_read_config_word(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ WORD * word_ptr
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisReadPciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) word_ptr,
+ 2
+ );
+
+ return TRUE;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_read_config_byte
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space from
+* which to read.
+* byte_ptr -> Buffer for the data read.
+*
+* Purpose - Read a BYTE from PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_read_config_byte(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ BYTE * byte_ptr
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisReadPciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) byte_ptr,
+ 1
+ );
+
+ return TRUE;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_write_config_dword
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space to
+* which to write.
+* dword -> Data to write.
+*
+* Purpose - Write a DWORD to PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_write_config_dword(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ DWORD dword
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisWritePciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) &dword,
+ 4
+ );
+
+ return TRUE;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_write_config_word
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space to
+* which to write.
+* word -> Data to write.
+*
+* Purpose - Write a WORD to PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_write_config_word(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ WORD word
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisWritePciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) &word,
+ 2
+ );
+
+ return TRUE;
+}
+
+
+/***************************************************************************
+*
+* Function - sys_pci_write_config_byte
+*
+* Parameter - adapter_handle -> FTK adapter handle.
+* index -> Offset into the configuration space to
+* which to write.
+* byte -> Data to write.
+*
+* Purpose - Write a BYTE to PCI configuration space.
+*
+* Returns - TRUE on success.
+*
+***************************************************************************/
+
+WBOOLEAN
+sys_pci_write_config_byte(
+ ADAPTER_HANDLE adapter_handle,
+ WORD index,
+ BYTE byte
+ )
+{
+ PMADGE_ADAPTER ndisAdap;
+
+ ndisAdap = PMADGE_ADAPTER_FROM_ADAPTER_HANDLE(adapter_handle);
+
+ NdisWritePciSlotInformation(
+ ndisAdap->UsedInISR.MiniportHandle,
+ (ULONG) adapter_record[adapter_handle]->pci_handle,
+ index,
+ (void *) &byte,
+ 1
+ );
+
+ return TRUE;
+}
+
+/******** End of SYS_MEM.C ************************************************/
+