DOCUMENT ID: 1554-02 SYNOPSIS: adb script to determine serial com chip KEYWORDS: 16550 16450 8250 serial communication asy port OS RELEASE: 2.4, 2.5 PRODUCT: Solaris x86 DESCRIPTION: Background There are two types of serial communication integrated circuits (chips) used to implement the Intel platform "com ports": buffered and non-buffered. The original IBM personal computer used the now familiar 8250 chip. As the pc evolved to the At class machines IBM recommended using the first buffered chip the 16450, only a 1 character buffer at that. The new buffered chip allowed for the increase performance of the AT. National Semiconductor enhanced the design even more with the 16550 and with a recent arrival of the 16750. The 16550 features 16 character buffering on both received and transmit while the 16750 has 64 characters. The asy driver determines the type of chip on a com port during the "probe" phase of driver attachment. The status reurned by the chip indicates the chip type. Currently three types are recognized: 16550, 82150 and 8250. The default is an 8250. Some 16550 clone chips don't return the correct status and are hence classified as 8250s. It is important to determine what driver is loaded using the prtconf command. If a window manager is being used it is almost guaranteed the driver is loaded when a serial mouse is in use. Each attached asy port has an associated asycom structure. Not all parts of the structure are meaning full outside the context of the Unix kernel environment. An extraction of the structure from /usr/include/asy.h is included here for examination. The size of the structure is 48 bytes. ============================================ struct asycom { int asy_flags; /* random flags */ /* protected by asy_excl_hi lock */ u_int asy_hwtype; /* HW type: ASY82510, etc. */ u_int asy_use_fifo; /* HW FIFO use it or not ?? */ u_int asy_fifo_buf; /* With FIFO = 16, otherwise = 1 */ u_int asy_ioaddr; /* i/o address of ASY port */ u_int asy_vect; /* IRQ number */ caddr_t asy_priv; /* protocol private data */ dev_info_t *asy_dip; /* dev_info */ long asy_unit; /* which port */ ddi_iblock_cookie_t asy_iblock; kmutex_t *asy_excl; /* asy adaptive mutex */ kmutex_t *asy_excl_hi; /* asy spinlock mutex */ }; ============================================ Adb script to determine serial com chip Page 2 Adb Script Adb is a debugger utilized to patch and examine user programs. By using the "-k" option the kernel may be examined. The symbol asycom is a pointer to the kernel memory allocated for the asy asycom structures. If multiple asy ports are attached, the pointer and some simple math will allow access to each structure. The script will produce a report resembling the structure elements. The script is all one line, but as several due to space limitations. *asycom?"flags "Xn"hwtype "X" 1= 82510, 2 = 16550, 3 = 8250"n"use_fifo "X " 1 = enabled"n"fifo "D" bytes"n"i/o "X For illustative purposes a file "asyrpt.adb" contains the line will be used. The kernel may be accessed only by root. A sample command sequence and output might be: su password: adb -k < asyrpt.adb Current registers belong to a snapshot of kernel thread at: 0xf593e060 on cpu[0] at: 0xe0108d38 Use thread_addr$t or proc_addr$p to change the snapshot. pcfs_minor+0x2c88: flags 0 hwtype 2 1= 82510, 2 = 16550, 3 = 8250 use_fifo 1 1 = enabled fifo 16 bytes i/o 3f8 NOTE: The label pcfs_minor is the first one encountered and is meaningless. Keep in mind the fact "asycom" is a pointer to allocated space. DATE APPROVED: 11/27/95