Annotation of ntddk/src/krnldbg/kdapis/dbgkdsup.c, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1990  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     dbgkdsup.c
                      8: 
                      9: Abstract:
                     10: 
                     11:     This module contains os specific DbgKd support routines
                     12: 
                     13: Author:
                     14: 
                     15:     Mark Lucovsky (markl) 27-Jul-1990
                     16: 
                     17: Revision History:
                     18: 
                     19:     Roger Lanser  (O-ALEXBR) 18-Jan-1992  Removed #ifdef DECSTATION and added
                     20:                              hack for baud rate environment variable.  Unable
                     21:                              to compile due to failure to find include files.
                     22: 
                     23: --*/
                     24: 
                     25: #include "givit.h"
                     26: 
                     27: #define  THREAD_STACK_SIZE    16000        /* Better safe than... */
                     28: #define COM_PORT_NAME   "_NT_DEBUG_PORT"
                     29: #define COM_PORT_BAUD   "_NTKD_BAUD_RATE"
                     30: 
                     31: HANDLE PipeRead;
                     32: HANDLE PipeWrite;
                     33: 
                     34: VOID
                     35: DbgKdpStartThreads(VOID)
                     36: {
                     37:     HANDLE PollThread;
                     38:     PBYTE KbdPollThreadStack;
                     39:     DWORD KbdPollThreadId;
                     40: 
                     41:     if( CreatePipe( &PipeRead, &PipeWrite, NULL, (1024-32)) == FALSE ) {
                     42:         fprintf(stderr, "Failed to create anonymous pipe in KdpStartThreads\n");
                     43:         fprintf(stderr, "Error code %lx\n", GetLastError());
                     44:         exit(1);
                     45:     }
                     46: 
                     47:     PollThread = CreateThread(
                     48:                               NULL,
                     49:                               THREAD_STACK_SIZE,
                     50:                               (LPTHREAD_START_ROUTINE)DbgKdpKbdPollThread,
                     51:                               NULL,
                     52:                               THREAD_SET_INFORMATION,
                     53:                               (LPDWORD)&KbdPollThreadId
                     54:                               );
                     55: 
                     56: 
                     57:     if ( PollThread == (HANDLE)NULL ) {
                     58:         fprintf(stderr,"Failed to create KbdPollThread %d\n",PollThread);
                     59:         exit(1);
                     60:     }
                     61:     else {
                     62:         if (!SetThreadPriority(PollThread, THREAD_PRIORITY_ABOVE_NORMAL)) {
                     63:             fprintf(stderr, "Fail to raise the priority of PollThread.\n");
                     64:         }
                     65:     }
                     66: }
                     67: 
                     68: 
                     69: VOID
                     70: DbgKdpInitComPort(
                     71:     ULONG ComPort
                     72:     )
                     73: {
                     74:     PUCHAR ComPortName;
                     75:     USHORT Baud;
                     76:     DCB    LocalDcb;
                     77:     COMMTIMEOUTS To;
                     78: 
                     79:     //
                     80:     // A quick hack to remove the #ifdef DECSTATION so the mips version
                     81:     // is ok for DECSTATION.  No other files were modified to reflect
                     82:     // this change.
                     83:     //
                     84: 
                     85:     {
                     86:        PUCHAR baudRateEnvValue;
                     87:        if (baudRateEnvValue = getenv(COM_PORT_BAUD)) {
                     88:           Baud = atoi(baudRateEnvValue);
                     89:           fprintf(stderr, "KD: baud rate reset to %d\n\n", Baud);
                     90:        } else {
                     91:           Baud = 19200;
                     92:        }
                     93:     }
                     94: 
                     95: 
                     96:     //
                     97:     // Read an environment variable to decide what comport to use,
                     98:     // IGNORE the bogus comport argument.
                     99:     //
                    100: 
                    101:     ComPortName = getenv(COM_PORT_NAME);
                    102:     if (ComPortName == NULL) {
                    103:         ComPortName = "com1";
                    104:     }
                    105: 
                    106:     //
                    107:     // Open the device
                    108:     //
                    109:     DbgKdpComPort = CreateFile(
                    110:                         (PSZ)ComPortName,
                    111:                         GENERIC_READ | GENERIC_WRITE,
                    112:                         0,
                    113:                         NULL,
                    114:                         OPEN_ALWAYS,
                    115:                         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                    116:                         NULL
                    117:                         );
                    118: 
                    119:     if ( DbgKdpComPort == (HANDLE)-1 ) {
                    120:         fprintf(stderr,"Failed to open %s\n",ComPortName);
                    121:         exit(1);
                    122:     }
                    123: 
                    124:     SetupComm(DbgKdpComPort,(DWORD)4096,(DWORD)4096);
                    125: 
                    126:     //
                    127:     // Create the events used by the overlapped structures for the
                    128:     // read and write.
                    129:     //
                    130: 
                    131:     ReadOverlapped.hEvent = CreateEvent(
                    132:                                 NULL,
                    133:                                 TRUE,
                    134:                                 FALSE,NULL
                    135:                                 );
                    136: 
                    137:     if (!ReadOverlapped.hEvent) {
                    138:         fprintf(stderr,"Failed to create read event support for %s\n",ComPortName);
                    139:         exit(1);
                    140:     }
                    141: 
                    142:     WriteOverlapped.hEvent = CreateEvent(
                    143:                                  NULL,
                    144:                                  TRUE,
                    145:                                  FALSE,NULL
                    146:                                  );
                    147: 
                    148:     if (!WriteOverlapped.hEvent) {
                    149:         fprintf(stderr,"Failed to create write event support for %s\n",ComPortName);
                    150:         exit(1);
                    151:     }
                    152: 
                    153:     ReadOverlapped.Offset = 0;
                    154:     ReadOverlapped.OffsetHigh = 0;
                    155: 
                    156:     WriteOverlapped.Offset = 0;
                    157:     WriteOverlapped.OffsetHigh = 0;
                    158: 
                    159:     //
                    160:     // Set up the Comm port....
                    161:     //
                    162: 
                    163:     if (!GetCommState(
                    164:              DbgKdpComPort,
                    165:              &LocalDcb
                    166:              )) {
                    167: 
                    168:         fprintf(stderr,"Failed to get the old comm state for %s\n",ComPort);
                    169:         exit(1);
                    170: 
                    171:     }
                    172: 
                    173:     LocalDcb.BaudRate = Baud;
                    174:     LocalDcb.ByteSize = 8;
                    175:     LocalDcb.Parity = NOPARITY;
                    176:     LocalDcb.StopBits = ONESTOPBIT;
                    177:     LocalDcb.fDtrControl = DTR_CONTROL_ENABLE;
                    178:     LocalDcb.fRtsControl = RTS_CONTROL_ENABLE;
                    179:     LocalDcb.fBinary = TRUE;
                    180:     LocalDcb.fOutxCtsFlow = FALSE;
                    181:     LocalDcb.fOutxDsrFlow = FALSE;
                    182:     LocalDcb.fOutX = FALSE;
                    183:     LocalDcb.fInX = FALSE;
                    184: 
                    185:     if (!SetCommState(
                    186:             DbgKdpComPort,
                    187:             &LocalDcb
                    188:             )) {
                    189: 
                    190:         fprintf(stderr,"Failed to set state for %s.\n",ComPortName);
                    191:         exit(1);
                    192: 
                    193:     }
                    194: 
                    195:     //
                    196:     // Set the normal read and write timeout time.
                    197:     // The symbols are 10 millisecond intervals.
                    198:     //
                    199: 
                    200:     To.ReadIntervalTimeout = 0;
                    201:     To.ReadTotalTimeoutMultiplier = 0;
                    202:     To.ReadTotalTimeoutConstant = 4 * 1000;
                    203:     To.WriteTotalTimeoutMultiplier = 0;
                    204:     To.WriteTotalTimeoutConstant = 4 * 1000;
                    205: 
                    206:     if (!SetCommTimeouts(
                    207:              DbgKdpComPort,
                    208:              &To
                    209:              )) {
                    210: 
                    211:         fprintf(stderr,"Failed to set timeouts for %s.\n",ComPortName);
                    212:         exit(1);
                    213: 
                    214:     }
                    215: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.