Home | History | Annotate | Download | only in ddk
      1 /*
      2  * smbus.h
      3  *
      4  * System Management Bus driver interface
      5  *
      6  * This file is part of the w32api package.
      7  *
      8  * Contributors:
      9  *   Created by Casper S. Hornstrup <chorns (at) users.sourceforge.net>
     10  *
     11  * THIS SOFTWARE IS NOT COPYRIGHTED
     12  *
     13  * This source code is offered for use in the public domain. You may
     14  * use, modify or distribute it freely.
     15  *
     16  * This code is distributed in the hope that it will be useful but
     17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     18  * DISCLAIMED. This includes but is not limited to warranties of
     19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     20  *
     21  */
     22 
     23 #ifndef __SMBUS_H
     24 #define __SMBUS_H
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 #if !defined(SMBCLASS)
     31 #define SMBCLASSAPI DECLSPEC_IMPORT
     32 #else
     33 #define SMBCLASSAPI
     34 #endif
     35 
     36 #define SMB_BUS_REQUEST \
     37   CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
     38 
     39 #define SMB_DEREGISTER_ALARM_NOTIFY \
     40   CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS)
     41 
     42 #define SMB_REGISTER_ALARM_NOTIFY \
     43   CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)
     44 
     45 
     46 struct _SMB_CLASS;
     47 
     48 #define SMB_MAX_DATA_SIZE                 32
     49 
     50 /* SMB_REQUEST.Status constants */
     51 #define SMB_STATUS_OK                     0x00
     52 #define SMB_UNKNOWN_FAILURE               0x07
     53 #define SMB_ADDRESS_NOT_ACKNOWLEDGED      0x10
     54 #define SMB_DEVICE_ERROR                  0x11
     55 #define SMB_COMMAND_ACCESS_DENIED         0x12
     56 #define SMB_UNKNOWN_ERROR                 0x13
     57 #define SMB_DEVICE_ACCESS_DENIED          0x17
     58 #define SMB_TIMEOUT                       0x18
     59 #define SMB_UNSUPPORTED_PROTOCOL          0x19
     60 #define SMB_BUS_BUSY                      0x1A
     61 
     62 /* SMB_REQUEST.Protocol constants */
     63 #define SMB_WRITE_QUICK                   0x00
     64 #define SMB_READ_QUICK                    0x01
     65 #define SMB_SEND_BYTE                     0x02
     66 #define SMB_RECEIVE_BYTE                  0x03
     67 #define SMB_WRITE_BYTE                    0x04
     68 #define SMB_READ_BYTE                     0x05
     69 #define SMB_WRITE_WORD                    0x06
     70 #define SMB_READ_WORD                     0x07
     71 #define SMB_WRITE_BLOCK                   0x08
     72 #define SMB_READ_BLOCK                    0x09
     73 #define SMB_PROCESS_CALL                  0x0A
     74 #define SMB_MAXIMUM_PROTOCOL              0x0A
     75 
     76 typedef struct _SMB_REQUEST {
     77   UCHAR  Status;
     78   UCHAR  Protocol;
     79   UCHAR  Address;
     80   UCHAR  Command;
     81   UCHAR  BlockLength;
     82   UCHAR  Data[SMB_MAX_DATA_SIZE];
     83 } SMB_REQUEST, *PSMB_REQUEST;
     84 
     85 typedef VOID
     86 (NTAPI *SMB_ALARM_NOTIFY)(
     87   PVOID  Context,
     88   UCHAR  Address,
     89   USHORT  Data);
     90 
     91 typedef struct _SMB_REGISTER_ALARM {
     92   UCHAR  MinAddress;
     93   UCHAR  MaxAddress;
     94   SMB_ALARM_NOTIFY  NotifyFunction;
     95   PVOID  NotifyContext;
     96 } SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM;
     97 
     98 /* SMB_CLASS.XxxVersion constants */
     99 #define SMB_CLASS_MAJOR_VERSION           0x0001
    100 #define SMB_CLASS_MINOR_VERSION           0x0000
    101 
    102 typedef NTSTATUS
    103 (NTAPI *SMB_RESET_DEVICE)(
    104   IN struct _SMB_CLASS  *SmbClass,
    105   IN PVOID  SmbMiniport);
    106 
    107 typedef VOID
    108 (NTAPI *SMB_START_IO)(
    109   IN struct _SMB_CLASS  *SmbClass,
    110   IN PVOID  SmbMiniport);
    111 
    112 typedef NTSTATUS
    113 (NTAPI *SMB_STOP_DEVICE)(
    114   IN struct _SMB_CLASS  *SmbClass,
    115   IN PVOID  SmbMiniport);
    116 
    117 typedef struct _SMB_CLASS {
    118   USHORT  MajorVersion;
    119   USHORT  MinorVersion;
    120   PVOID  Miniport;
    121   PDEVICE_OBJECT  DeviceObject;
    122   PDEVICE_OBJECT  PDO;
    123   PDEVICE_OBJECT  LowerDeviceObject;
    124   PIRP  CurrentIrp;
    125   PSMB_REQUEST  CurrentSmb;
    126   SMB_RESET_DEVICE  ResetDevice;
    127   SMB_START_IO  StartIo;
    128   SMB_STOP_DEVICE  StopDevice;
    129 } SMB_CLASS, *PSMB_CLASS;
    130 
    131 SMBCLASSAPI
    132 VOID
    133 NTAPI
    134 SmbClassAlarm(
    135   IN PSMB_CLASS  SmbClass,
    136   IN UCHAR  Address,
    137   IN USHORT  Data);
    138 
    139 SMBCLASSAPI
    140 VOID
    141 NTAPI
    142 SmbClassCompleteRequest(
    143   IN PSMB_CLASS  SmbClass);
    144 
    145 typedef NTSTATUS
    146 (NTAPI *PSMB_INITIALIZE_MINIPORT)(
    147   IN PSMB_CLASS  SmbClass,
    148   IN PVOID  MiniportExtension,
    149   IN PVOID  MiniportContext);
    150 
    151 SMBCLASSAPI
    152 NTSTATUS
    153 NTAPI
    154 SmbClassCreateFdo(
    155   IN PDRIVER_OBJECT  DriverObject,
    156   IN PDEVICE_OBJECT  PDO,
    157   IN ULONG  MiniportExtensionSize,
    158   IN PSMB_INITIALIZE_MINIPORT  MiniportInitialize,
    159   IN PVOID  MiniportContext,
    160   OUT PDEVICE_OBJECT  *FDO);
    161 
    162 SMBCLASSAPI
    163 NTSTATUS
    164 NTAPI
    165 SmbClassInitializeDevice(
    166   IN ULONG  MajorVersion,
    167   IN ULONG  MinorVersion,
    168   IN PDRIVER_OBJECT  DriverObject);
    169 
    170 SMBCLASSAPI
    171 VOID
    172 NTAPI
    173 SmbClassLockDevice(
    174   IN PSMB_CLASS  SmbClass);
    175 
    176 SMBCLASSAPI
    177 VOID
    178 NTAPI
    179 SmbClassUnlockDevice(
    180   IN PSMB_CLASS  SmbClass);
    181 
    182 #ifdef __cplusplus
    183 }
    184 #endif
    185 
    186 #endif /* __SMBUS_H */
    187 
    188