Sync to mac68k.

This commit is contained in:
tsubai 1998-11-05 11:46:07 +00:00
parent 37bbf03777
commit 1bf603b543
1 changed files with 161 additions and 111 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: adb_direct.c,v 1.5 1998/11/04 15:06:13 tsubai Exp $ */
/* $NetBSD: adb_direct.c,v 1.6 1998/11/05 11:46:07 tsubai Exp $ */
/* From: adb_direct.c 2.02 4/18/97 jpw */
@ -70,10 +70,15 @@
#include <macppc/dev/viareg.h>
#include <macppc/dev/adbvar.h>
#include <macppc/dev/adb_direct.h>
#define printf_intr printf
#ifdef DEBUG
#ifndef ADB_DEBUG
#define ADB_DEBUG
#endif
#endif
/* some misc. leftovers */
#define vPB 0x0000
#define vPB3 0x08
@ -82,32 +87,25 @@
#define vSR_INT 0x04
#define vSR_OUT 0x10
/* types of adb hardware that we (will eventually) support */
#define ADB_HW_UNKNOWN 0x01 /* don't know */
#define ADB_HW_II 0x02 /* Mac II series */
#define ADB_HW_IISI 0x03 /* Mac IIsi series */
#define ADB_HW_PB 0x04 /* PowerBook series */
#define ADB_HW_CUDA 0x05 /* Machines with a Cuda chip */
/* the type of ADB action that we are currently preforming */
#define ADB_ACTION_NOTREADY 0x01 /* has not been initialized yet */
#define ADB_ACTION_IDLE 0x02 /* the bus is currently idle */
#define ADB_ACTION_OUT 0x03 /* sending out a command */
#define ADB_ACTION_IN 0x04 /* receiving data */
#define ADB_ACTION_POLLING 0x05 /* polling - II only */
#define ADB_ACTION_NOTREADY 0x1 /* has not been initialized yet */
#define ADB_ACTION_IDLE 0x2 /* the bus is currently idle */
#define ADB_ACTION_OUT 0x3 /* sending out a command */
#define ADB_ACTION_IN 0x4 /* receiving data */
#define ADB_ACTION_POLLING 0x5 /* polling - II only */
/*
* These describe the state of the ADB bus itself, although they
* don't necessarily correspond directly to ADB states.
* Note: these are not really used in the IIsi code.
*/
#define ADB_BUS_UNKNOWN 0x01 /* we don't know yet - all models */
#define ADB_BUS_IDLE 0x02 /* bus is idle - all models */
#define ADB_BUS_CMD 0x03 /* starting a command - II models */
#define ADB_BUS_ODD 0x04 /* the "odd" state - II models */
#define ADB_BUS_EVEN 0x05 /* the "even" state - II models */
#define ADB_BUS_ACTIVE 0x06 /* active state - IIsi models */
#define ADB_BUS_ACK 0x07 /* currently ACKing - IIsi models */
#define ADB_BUS_UNKNOWN 0x1 /* we don't know yet - all models */
#define ADB_BUS_IDLE 0x2 /* bus is idle - all models */
#define ADB_BUS_CMD 0x3 /* starting a command - II models */
#define ADB_BUS_ODD 0x4 /* the "odd" state - II models */
#define ADB_BUS_EVEN 0x5 /* the "even" state - II models */
#define ADB_BUS_ACTIVE 0x6 /* active state - IIsi models */
#define ADB_BUS_ACK 0x7 /* currently ACKing - IIsi models */
/*
* Shortcuts for setting or testing the VIA bit states.
@ -247,19 +245,20 @@ int tickle_serial = 0; /* the last packet tickled */
int adb_cuda_serial = 0; /* the current packet */
volatile u_char *Via1Base;
extern int adb_polling;
int zshard __P((int));
extern int adb_polling; /* Are we polling? */
void pm_setup_adb __P((void));
void pm_check_adb_devices __P((int));
void pm_intr __P((void));
int pm_adb_op __P((u_char *, void *, void *, int));
void pm_init_adb_device __P((void));
/*
* The following are private routines.
*/
#ifdef ADB_DEBUG
void print_single __P((u_char *));
#endif
void adb_intr __P((void));
void adb_intr_II __P((void));
void adb_intr_IIsi __P((void));
@ -292,6 +291,7 @@ int adb_prog_switch_disable __P((void));
/* we should create this and it will be the public version */
int send_adb __P((u_char *, void *, void *));
#ifdef ADB_DEBUG
/*
* print_single
* Diagnostic display routine. Displays the hex values of the
@ -321,6 +321,7 @@ print_single(thestring)
printf_intr(" 0x%02x", thestring[x + 1]);
printf_intr("\n");
}
#endif
void
adb_cuda_tickle(void)
@ -352,7 +353,8 @@ adb_cuda_tickle(void)
* called when when an adb interrupt happens
*
* Cuda version of adb_intr
* TO DO: do we want to add some zshard calls in here?
* TO DO: do we want to add some calls to intr_dispatch() here to
* grab serial interrupts?
*/
void
adb_intr_cuda(void)
@ -559,11 +561,17 @@ switch_start:
break;
case ADB_ACTION_NOTREADY:
printf_intr("adb: not yet initialized\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: not yet initialized\n");
#endif
break;
default:
printf_intr("intr: unknown ADB state\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("intr: unknown ADB state\n");
#endif
}
ADB_VIA_INTR_ENABLE(); /* enable ADB interrupt on IIs. */
@ -834,7 +842,10 @@ adb_pass_up(struct adbCommand *in)
/*u_char *comprout = 0;*/
if (adbInCount >= ADB_QUEUE) {
printf_intr("adb: ring buffer overflow\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: ring buffer overflow\n");
#endif
return;
}
@ -1155,8 +1166,12 @@ adb_hw_setup(void)
for (i = 0; i < 30; i++) {
delay(ADB_DELAY);
adb_hw_setup_IIsi(send_string);
printf_intr("adb: cleanup: ");
print_single(send_string);
#ifdef ADB_DEBUG
if (adb_debug) {
printf_intr("adb: cleanup: ");
print_single(send_string);
}
#endif
delay(ADB_DELAY);
if (ADB_INTR_IS_OFF)
break;
@ -1412,15 +1427,22 @@ adb_reinit(void)
}
#endif
#ifndef MRG_ADB
/* enable the programmer's switch, if we have one */
adb_prog_switch_enable();
#endif
if (0 == ADBNumDevices) /* tell user if no devices found */
printf_intr("adb: no devices found\n");
#ifdef ADB_DEBUG
if (adb_debug) {
if (0 == ADBNumDevices) /* tell user if no devices found */
printf_intr("adb: no devices found\n");
}
#endif
adbStarting = 0; /* not starting anymore */
#ifdef ADB_DEBUG
printf_intr("adb: ADBReInit complete\n");
if (adb_debug)
printf_intr("adb: ADBReInit complete\n");
#endif
if (adbHardware == ADB_HW_CUDA)
@ -1595,92 +1617,119 @@ adb_op_comprout(buffer, compdata, cmd)
void
adb_setup_hw_type(void)
{
long response;
if (adbHardware == ADB_HW_CUDA)
switch (adbHardware) {
case ADB_HW_CUDA:
adbSoftPower = 1;
return;
if (adbHardware == ADB_HW_PB) {
case ADB_HW_PB:
pm_setup_adb();
return;
}
panic("unknown adb hardware");
default:
panic("unknown adb hardware");
}
#if 0
response = 0; /*mac68k_machine.machineid;*/
/*
* Determine what type of ADB hardware we are running on.
*/
switch (response) {
case 6: /* II */
case 7: /* IIx */
case 8: /* IIcx */
case 9: /* SE/30 */
case 11: /* IIci */
case 22: /* Quadra 700 */
case 30: /* Centris 650 */
case 35: /* Quadra 800 */
case 36: /* Quadra 650 */
case 52: /* Centris 610 */
case 53: /* Quadra 610 */
case MACH_MACC610: /* Centris 610 */
case MACH_MACC650: /* Centris 650 */
case MACH_MACII: /* II */
case MACH_MACIICI: /* IIci */
case MACH_MACIICX: /* IIcx */
case MACH_MACIIX: /* IIx */
case MACH_MACQ610: /* Quadra 610 */
case MACH_MACQ650: /* Quadra 650 */
case MACH_MACQ700: /* Quadra 700 */
case MACH_MACQ800: /* Quadra 800 */
case MACH_MACSE30: /* SE/30 */
adbHardware = ADB_HW_II;
printf_intr("adb: using II series hardware support\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: using II series hardware support\n");
#endif
break;
case 18: /* IIsi */
case 20: /* Quadra 900 - not sure if IIsi or not */
case 23: /* Classic II */
case 26: /* Quadra 950 - not sure if IIsi or not */
case 27: /* LC III, Performa 450 */
case 37: /* LC II, Performa 400/405/430 */
case 44: /* IIvi */
case 45: /* Performa 600 */
case 48: /* IIvx */
case 62: /* Performa 460/465/467 */
case MACH_MACCLASSICII: /* Classic II */
case MACH_MACLCII: /* LC II, Performa 400/405/430 */
case MACH_MACLCIII: /* LC III, Performa 450 */
case MACH_MACIISI: /* IIsi */
case MACH_MACIIVI: /* IIvi */
case MACH_MACIIVX: /* IIvx */
case MACH_MACP460: /* Performa 460/465/467 */
case MACH_MACP600: /* Performa 600 */
case MACH_MACQ900: /* Quadra 900 - XXX not sure */
case MACH_MACQ950: /* Quadra 950 - XXX not sure */
adbHardware = ADB_HW_IISI;
printf_intr("adb: using IIsi series hardware support\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: using IIsi series hardware support\n");
#endif
break;
case 21: /* PowerBook 170 */
case 25: /* PowerBook 140 */
case 54: /* PowerBook 145 */
case 34: /* PowerBook 160 */
case 84: /* PowerBook 165 */
case 50: /* PowerBook 165c */
case 33: /* PowerBook 180 */
case 71: /* PowerBook 180c */
case 115: /* PowerBook 150 */
case MACH_MACPB140: /* PowerBook 140 */
case MACH_MACPB145: /* PowerBook 145 */
case MACH_MACPB150: /* PowerBook 150 */
case MACH_MACPB160: /* PowerBook 160 */
case MACH_MACPB165: /* PowerBook 165 */
case MACH_MACPB165C: /* PowerBook 165c */
case MACH_MACPB170: /* PowerBook 170 */
case MACH_MACPB180: /* PowerBook 180 */
case MACH_MACPB180C: /* PowerBook 180c */
adbHardware = ADB_HW_PB;
pm_setup_adb();
printf_intr("adb: using PowerBook 100-series hardware support\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: using PowerBook 100-series hardware support\n");
#endif
break;
case 29: /* PowerBook Duo 210 */
case 32: /* PowerBook Duo 230 */
case 38: /* PowerBook Duo 250 */
case 72: /* PowerBook 500 series */
case 77: /* PowerBook Duo 270 */
case 102: /* PowerBook Duo 280 */
case 103: /* PowerBook Duo 280c */
case MACH_MACPB210: /* PowerBook Duo 210 */
case MACH_MACPB230: /* PowerBook Duo 230 */
case MACH_MACPB250: /* PowerBook Duo 250 */
case MACH_MACPB270: /* PowerBook Duo 270 */
case MACH_MACPB280: /* PowerBook Duo 280 */
case MACH_MACPB280C: /* PowerBook Duo 280c */
case MACH_MACPB500: /* PowerBook 500 series */
adbHardware = ADB_HW_PB;
pm_setup_adb();
printf_intr("adb: using PowerBook Duo-series and PowerBook 500-series hardware support\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: using PowerBook Duo-series and PowerBook 500-series hardware support\n");
#endif
break;
case 49: /* Color Classic */
case 56: /* LC 520 */
case 60: /* Centris 660AV */
case 78: /* Quadra 840AV */
case 80: /* LC 550, Performa 550 */
case 83: /* Color Classic II */
case 89: /* LC 475, Performa 475/476 */
case 92: /* LC 575, Performa 575/577/578 */
case 94: /* Quadra 605 */
case 98: /* LC 630, Performa 630, Quadra 630 */
case 99: /* Performa 580(?)/588 */
case MACH_MACC660AV: /* Centris 660AV */
case MACH_MACCCLASSIC: /* Color Classic */
case MACH_MACCCLASSICII: /* Color Classic II */
case MACH_MACLC475: /* LC 475, Performa 475/476 */
case MACH_MACLC475_33: /* Clock-chipped 47x */
case MACH_MACLC520: /* LC 520 */
case MACH_MACLC575: /* LC 575, Performa 575/577/578 */
case MACH_MACP550: /* LC 550, Performa 550 */
case MACH_MACP580: /* Performa 580/588 */
case MACH_MACQ605: /* Quadra 605 */
case MACH_MACQ605_33: /* Clock-chipped Quadra 605 */
case MACH_MACQ630: /* LC 630, Performa 630, Quadra 630 */
case MACH_MACQ840AV: /* Quadra 840AV */
adbHardware = ADB_HW_CUDA;
printf_intr("adb: using Cuda series hardware support\n");
#ifdef ADB_DEBUG
if (adb_debug)
printf_intr("adb: using Cuda series hardware support\n");
#endif
break;
default:
adbHardware = ADB_HW_UNKNOWN;
printf_intr("adb: hardware type unknown for this machine\n");
printf_intr("adb: ADB support is disabled\n");
#ifdef ADB_DEBUG
if (adb_debug) {
printf_intr("adb: hardware type unknown for this machine\n");
printf_intr("adb: ADB support is disabled\n");
}
#endif
break;
}
@ -1688,22 +1737,23 @@ adb_setup_hw_type(void)
* Determine whether this machine has ADB based soft power.
*/
switch (response) {
case 18: /* IIsi */
case 20: /* Quadra 900 - not sure if IIsi or not */
case 26: /* Quadra 950 - not sure if IIsi or not */
case 44: /* IIvi */
case 45: /* Performa 600 */
case 48: /* IIvx */
case 49: /* Color Classic */
case 83: /* Color Classic II */
case 56: /* LC 520 */
case 78: /* Quadra 840AV */
case 80: /* LC 550, Performa 550 */
case 92: /* LC 575, Performa 575/577/578 */
case 98: /* LC 630, Performa 630, Quadra 630 */
case MACH_MACCCLASSIC: /* Color Classic */
case MACH_MACCCLASSICII: /* Color Classic II */
case MACH_MACIISI: /* IIsi */
case MACH_MACIIVI: /* IIvi */
case MACH_MACIIVX: /* IIvx */
case MACH_MACLC520: /* LC 520 */
case MACH_MACLC575: /* LC 575, Performa 575/577/578 */
case MACH_MACP550: /* LC 550, Performa 550 */
case MACH_MACP600: /* Performa 600 */
case MACH_MACQ630: /* LC 630, Performa 630, Quadra 630 */
case MACH_MACQ840AV: /* Quadra 840AV */
case MACH_MACQ900: /* Quadra 900 - XXX not sure */
case MACH_MACQ950: /* Quadra 950 - XXX not sure */
adbSoftPower = 1;
break;
}
#endif
}
int
@ -1783,6 +1833,8 @@ set_adb_info(ADBSetInfoBlock * info, int adbAddr)
}
#ifndef MRG_ADB
/* caller should really use machine-independant version: getPramTime */
/* this version does pseudo-adb access only */
int
@ -1812,6 +1864,7 @@ adb_read_date_time(unsigned long *time)
return 0;
case ADB_HW_PB:
pm_read_date_time();
return -1;
case ADB_HW_CUDA:
@ -1826,7 +1879,7 @@ adb_read_date_time(unsigned long *time)
while (0 == flag) /* wait for result */
;
bcopy(output + 1, time, 4);
memcpy(time, output + 1, 4);
return 0;
case ADB_HW_UNKNOWN:
@ -1988,8 +2041,6 @@ adb_prog_switch_disable(void)
}
}
#ifndef MRG_ADB
int
CountADBs(void)
{
@ -2028,7 +2079,6 @@ ADBOp(Ptr buffer, Ptr compRout, Ptr data, short commandNum)
#endif
int
setsoftadb()
{