Revision 98352369

b/pc-bios/ohw.diff
1 1
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/bios.h OpenHackWare-release-0.4/src/bios.h
2 2
--- OpenHackWare-release-0.4.org/src/bios.h	2005-04-06 23:20:22.000000000 +0200
3
+++ OpenHackWare-release-0.4/src/bios.h	2005-07-03 16:17:41.000000000 +0200
3
+++ OpenHackWare-release-0.4/src/bios.h	2005-07-07 01:10:20.000000000 +0200
4 4
@@ -64,6 +64,7 @@
5 5
     ARCH_CHRP,
6 6
     ARCH_MAC99,
......
9 9
 };
10 10
 
11 11
 /* Hardware definition(s) */
12
@@ -183,12 +184,12 @@
12
@@ -174,6 +175,7 @@
13
 int bd_ioctl (bloc_device_t *bd, int func, void *args);
14
 uint32_t bd_seclen (bloc_device_t *bd);
15
 void bd_close (bloc_device_t *bd);
16
+void bd_reset_all(void);
17
 uint32_t bd_seclen (bloc_device_t *bd);
18
 uint32_t bd_maxbloc (bloc_device_t *bd);
19
 void bd_sect2CHS (bloc_device_t *bd, uint32_t secnum,
20
@@ -183,12 +185,12 @@
13 21
 part_t *bd_probe (int boot_device);
14 22
 bloc_device_t *bd_get (int device);
15 23
 void bd_put (bloc_device_t *bd);
......
24 32
 void ide_pci_pmac_register (uint32_t io_base0, uint32_t io_base1,
25 33
                             void *OF_private);
26 34
 
27
@@ -399,17 +400,23 @@
35
@@ -399,17 +401,23 @@
28 36
                               uint16_t min_grant, uint16_t max_latency);
29 37
 void OF_finalize_pci_host (void *dev, int first_bus, int nb_busses);
30 38
 void OF_finalize_pci_device (void *dev, uint8_t bus, uint8_t devfn,
......
53 61
                             const unsigned char *name, int devnum,
54 62
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/bloc.c OpenHackWare-release-0.4/src/bloc.c
55 63
--- OpenHackWare-release-0.4.org/src/bloc.c	2005-04-06 23:21:00.000000000 +0200
56
+++ OpenHackWare-release-0.4/src/bloc.c	2005-07-03 16:17:41.000000000 +0200
64
+++ OpenHackWare-release-0.4/src/bloc.c	2005-07-08 00:28:26.000000000 +0200
57 65
@@ -55,6 +55,7 @@
58 66
     /* Partitions */
59 67
     part_t *parts, *bparts;
......
62 70
     /* Chain */
63 71
     bloc_device_t *next;
64 72
 };
65
@@ -223,10 +224,12 @@
73
@@ -66,6 +67,7 @@
74
 
75
 static int ide_initialize (bloc_device_t *bd, int device);
76
 static int ide_read_sector (bloc_device_t *bd, void *buffer, int secnum);
77
+static int ide_reset (bloc_device_t *bd);
78
 
79
 static int mem_initialize (bloc_device_t *bd, int device);
80
 static int mem_read_sector (bloc_device_t *bd, void *buffer, int secnum);
81
@@ -212,6 +214,17 @@
82
 {
83
 }
84
 
85
+void bd_reset_all(void)
86
+{
87
+    bloc_device_t *bd;
88
+    for (bd = bd_list; bd != NULL; bd = bd->next) {
89
+        if (bd->init == &ide_initialize) {
90
+            /* reset IDE drive because Darwin wants all IDE devices to be reset */
91
+            ide_reset(bd);
92
+        }
93
+    }
94
+}
95
+
96
 uint32_t bd_seclen (bloc_device_t *bd)
97
 {
98
     return bd->seclen;
99
@@ -223,10 +236,12 @@
66 100
 }
67 101
 
68 102
 /* XXX: to be suppressed */
......
76 110
     }
77 111
 }
78 112
 
79
@@ -240,6 +243,13 @@
113
@@ -240,6 +255,13 @@
80 114
     return &bd->bparts;
81 115
 }
82 116
 
......
90 124
 part_t *bd_probe (int boot_device)
91 125
 {
92 126
     char devices[] = { /*'a', 'b',*/ 'c', 'd', 'e', 'f', 'm', '\0', };
93
@@ -272,9 +282,7 @@
127
@@ -272,9 +294,7 @@
94 128
         tmp = part_probe(bd, force_raw);
95 129
         if (boot_device == bd->device) {
96 130
             boot_part = tmp;
......
101 135
         }
102 136
     }
103 137
 
104
@@ -717,34 +725,29 @@
138
@@ -717,34 +737,29 @@
105 139
 /* IDE PCI access for pc */
106 140
 static uint8_t ide_pci_port_read (bloc_device_t *bd, int port)
107 141
 {
......
143 177
 }
144 178
 
145 179
 static ide_ops_t ide_pci_pc_ops = {
146
@@ -761,7 +764,7 @@
180
@@ -761,7 +776,7 @@
147 181
 
148 182
 void ide_pci_pc_register (uint32_t io_base0, uint32_t io_base1,
149 183
                           uint32_t io_base2, uint32_t io_base3,
......
152 186
 {
153 187
     if (ide_pci_ops == NULL) {
154 188
         ide_pci_ops = malloc(sizeof(ide_ops_t));
155
@@ -770,19 +773,19 @@
189
@@ -770,19 +785,19 @@
156 190
         memcpy(ide_pci_ops, &ide_pci_pc_ops, sizeof(ide_ops_t));
157 191
     }
158 192
     if ((io_base0 != 0 || io_base1 != 0) &&
......
178 212
 #endif
179 213
     }
180 214
 }
215
@@ -935,6 +950,8 @@
216
 }
217
 
218
 static void atapi_pad_req (void *buffer, int len);
219
+static void atapi_make_req (bloc_device_t *bd, uint32_t *buffer,
220
+                            int maxlen);
221
 static int atapi_read_sector (bloc_device_t *bd, void *buffer, int secnum);
222
 
223
 static int ide_initialize (bloc_device_t *bd, int device)
224
@@ -1035,9 +1052,7 @@
225
         DPRINTF("INQUIRY\n");
226
         len = spc_inquiry_req(&atapi_buffer, 36);
227
         atapi_pad_req(&atapi_buffer, len);
228
-        ide_port_write(bd, 0x07, 0xA0);
229
-        for (i = 0; i < 3; i++)
230
-            ide_data_writel(bd, ldswap32(&atapi_buffer[i]));
231
+        atapi_make_req(bd, atapi_buffer, 36);
232
         status = ide_port_read(bd, 0x07);
233
         if (status != 0x48) {
234
             ERROR("ATAPI INQUIRY : status %0x != 0x48\n", status);
235
@@ -1053,9 +1068,7 @@
236
         DPRINTF("READ_CAPACITY\n");
237
         len = mmc_read_capacity_req(&atapi_buffer);
238
         atapi_pad_req(&atapi_buffer, len);
239
-        ide_port_write(bd, 0x07, 0xA0);
240
-        for (i = 0; i < 3; i++)
241
-            ide_data_writel(bd, ldswap32(&atapi_buffer[i]));
242
+        atapi_make_req(bd, atapi_buffer, 8);
243
         status = ide_port_read(bd, 0x07);
244
         if (status != 0x48) {
245
             ERROR("ATAPI READ_CAPACITY : status %0x != 0x48\n", status);
246
@@ -1105,6 +1118,22 @@
247
     memset(p + len, 0, 12 - len);
248
 }
249
 
250
+static void atapi_make_req (bloc_device_t *bd, uint32_t *buffer,
251
+                            int maxlen)
252
+{
253
+    int i;
254
+    /* select drive */
255
+    if (bd->drv == 0)
256
+        ide_port_write(bd, 0x06, 0x40);
257
+    else
258
+        ide_port_write(bd, 0x06, 0x50);
259
+    ide_port_write(bd, 0x04, maxlen & 0xff);
260
+    ide_port_write(bd, 0x05, (maxlen >> 8) & 0xff);
261
+    ide_port_write(bd, 0x07, 0xA0);
262
+    for (i = 0; i < 3; i++)
263
+        ide_data_writel(bd, ldswap32(&buffer[i]));
264
+}
265
+
266
 static int atapi_read_sector (bloc_device_t *bd, void *buffer, int secnum)
267
 {
268
     uint32_t atapi_buffer[4];
269
@@ -1112,16 +1141,9 @@
270
     uint32_t status, value;
271
     int i, len;
272
 
273
-    /* select drive */
274
-    if (bd->drv == 0)
275
-        ide_port_write(bd, 0x06, 0x40);
276
-    else
277
-        ide_port_write(bd, 0x06, 0x50);
278
     len = mmc_read12_req(atapi_buffer, secnum, 1);
279
     atapi_pad_req(&atapi_buffer, len);
280
-    ide_port_write(bd, 0x07, 0xA0);
281
-    for (i = 0; i < 3; i++)
282
-        ide_data_writel(bd, ldswap32(&atapi_buffer[i]));
283
+    atapi_make_req(bd, atapi_buffer, bd->seclen);
284
     status = ide_port_read(bd, 0x07);
285
     if (status != 0x48) {
286
         ERROR("ATAPI READ12 : status %0x != 0x48\n", status);
181 287
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/libpart/apple.c OpenHackWare-release-0.4/src/libpart/apple.c
182 288
--- OpenHackWare-release-0.4.org/src/libpart/apple.c	2005-03-31 09:23:33.000000000 +0200
183 289
+++ OpenHackWare-release-0.4/src/libpart/apple.c	2005-07-03 16:17:41.000000000 +0200
......
527 633
     byte = NVRAM_get_byte(nvram, 0x34);
528 634
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/of.c OpenHackWare-release-0.4/src/of.c
529 635
--- OpenHackWare-release-0.4.org/src/of.c	2005-04-06 23:17:26.000000000 +0200
530
+++ OpenHackWare-release-0.4/src/of.c	2005-07-03 17:46:25.000000000 +0200
636
+++ OpenHackWare-release-0.4/src/of.c	2005-07-07 23:30:08.000000000 +0200
531 637
@@ -489,7 +489,7 @@
532 638
         ERROR("%s can't alloc new node '%s' name\n", __func__, name);
533 639
         return NULL;
......
537 643
     if (new->prop_address == NULL) {
538 644
         free(new->prop_name->value);
539 645
         free(new->prop_name);
540
@@ -1421,15 +1421,12 @@
646
@@ -1017,6 +1017,33 @@
647
                            string, strlen(string) + 1);
648
 }
649
 
650
+/* convert '\1' char to '\0' */
651
+static OF_prop_t *OF_prop_string_new1 (OF_env_t *env, OF_node_t *node,
652
+                                       const unsigned char *name,
653
+                                       const unsigned char *string)
654
+{
655
+    int len, i;
656
+    OF_prop_t *ret;
657
+    unsigned char *str;
658
+
659
+    if (strchr(string, '\1') == NULL) {
660
+        return OF_prop_string_new(env, node, name, string);
661
+    } else {
662
+        len = strlen(string) + 1;
663
+        str = malloc(len);
664
+        if (!str)
665
+            return NULL;
666
+        memcpy(str, string, len);
667
+        for(i = 0; i < len; i++)
668
+            if (str[i] == '\1')
669
+                str[i] = '\0';
670
+        ret = OF_property_new(env, node, name,
671
+                              str, len);
672
+        free(str);
673
+        return ret;
674
+    }
675
+}
676
+
677
 __attribute__ (( section (".OpenFirmware") ))
678
 static OF_prop_t *OF_prop_int_new (OF_env_t *env, OF_node_t *node,
679
                                    const unsigned char *name, uint32_t value)
680
@@ -1421,15 +1448,12 @@
541 681
 __attribute__ (( section (".OpenFirmware") ))
542 682
 int OF_init (void)
543 683
 {
......
553 693
 #endif
554 694
     OF_env_t *OF_env;
555 695
     OF_node_t *als, *opt, *chs, *pks;
556
@@ -1455,15 +1452,21 @@
696
@@ -1455,15 +1479,21 @@
557 697
         return -1;
558 698
     }
559 699
     OF_prop_string_new(OF_env, OF_node_root, "device_type", "bootrom");
......
581 721
 #if 0
582 722
     OF_prop_string_new(OF_env, OF_node_root, "copyright", copyright);
583 723
 #else
584
@@ -1561,14 +1564,15 @@
724
@@ -1561,14 +1591,15 @@
585 725
         range.size = 0x00800000;
586 726
         OF_property_new(OF_env, rom, "ranges", &range, sizeof(OF_range_t));
587 727
         OF_prop_int_new(OF_env, rom, "#address-cells", 1);
......
599 739
         OF_property_new(OF_env, brom, "reg", &regs, sizeof(OF_regprop_t));
600 740
         OF_prop_string_new(OF_env, brom, "write-characteristic", "flash");
601 741
         OF_prop_string_new(OF_env, brom, "BootROM-build-date",
602
@@ -1577,7 +1581,7 @@
742
@@ -1577,7 +1608,7 @@
603 743
         OF_prop_string_new(OF_env, brom, "copyright", copyright);
604 744
         OF_prop_string_new(OF_env, brom, "model", BIOS_str);
605 745
         OF_prop_int_new(OF_env, brom, "result", 0);
......
608 748
         {
609 749
             /* Hack taken 'as-is' from PearPC */
610 750
             unsigned char info[] = {
611
@@ -1596,7 +1600,9 @@
751
@@ -1596,7 +1627,9 @@
612 752
         OF_node_put(OF_env, brom);
613 753
         OF_node_put(OF_env, rom);
614 754
     }
......
618 758
     /* "/nvram@fff04000" node */
619 759
     {
620 760
         OF_regprop_t regs;
621
@@ -1617,6 +1623,7 @@
761
@@ -1617,6 +1650,7 @@
622 762
         OF_prop_int_new(OF_env, chs, "nvram", OF_pack_handle(OF_env, nvr));
623 763
         OF_node_put(OF_env, nvr);
624 764
     }
......
626 766
     /* "/pseudo-hid" : hid emulation as Apple does */
627 767
     {
628 768
         OF_node_t *hid;
629
@@ -1663,7 +1670,27 @@
769
@@ -1663,7 +1697,27 @@
630 770
         }
631 771
         OF_node_put(OF_env, hid);
632 772
     }
......
654 794
     
655 795
 #if 1 /* This is mandatory for claim to work
656 796
        * but I don't know where it should really be (in cpu ?)
657
@@ -1693,7 +1720,9 @@
797
@@ -1693,7 +1747,9 @@
658 798
 
659 799
     /* "/options/boot-args" node */
660 800
     {
......
665 805
         /* Ask MacOS X to print debug messages */
666 806
         //        OF_prop_string_new(OF_env, chs, "machargs", args);
667 807
         //        OF_prop_string_new(OF_env, opt, "boot-command", args);
668
@@ -2021,9 +2050,9 @@
808
@@ -2013,17 +2069,17 @@
809
     OF_prop_int_new(OF_env, node, "min-grant", min_grant);
810
     OF_prop_int_new(OF_env, node, "max-latency", max_latency);
811
     if (dev->type != NULL)
812
-        OF_prop_string_new(OF_env, node, "device_type", dev->type);
813
+        OF_prop_string_new1(OF_env, node, "device_type", dev->type);
814
     if (dev->compat != NULL)
815
-        OF_prop_string_new(OF_env, node, "compatible", dev->compat);
816
+        OF_prop_string_new1(OF_env, node, "compatible", dev->compat);
817
     if (dev->model != NULL)
818
-        OF_prop_string_new(OF_env, node, "model", dev->model);
819
+        OF_prop_string_new1(OF_env, node, "model", dev->model);
669 820
     if (dev->acells != 0)
670 821
         OF_prop_int_new(OF_env, node, "#address-cells", dev->acells);
671 822
     if (dev->scells != 0)
......
677 828
     dprintf("Done %p %p\n", parent, node);
678 829
     
679 830
     return node;
680
@@ -2040,8 +2069,9 @@
831
@@ -2040,8 +2096,9 @@
681 832
     OF_env_t *OF_env;
682 833
     pci_range_t ranges[3];
683 834
     OF_regprop_t regs[1];
......
688 839
 
689 840
     OF_env = OF_env_main;
690 841
     dprintf("register PCI host '%s' '%s' '%s' '%s'\n",
691
@@ -2052,6 +2082,17 @@
842
@@ -2052,6 +2109,17 @@
692 843
         ERROR("Cannot create pci host\n");
693 844
         return NULL;
694 845
     }
......
706 857
     regs[0].address = cfg_base;
707 858
     regs[0].size = cfg_len;
708 859
     OF_property_new(OF_env, pci_host, "reg", regs, sizeof(OF_regprop_t));
709
@@ -2136,6 +2177,11 @@
860
@@ -2136,6 +2204,11 @@
710 861
     return pci_dev;
711 862
 }
712 863
 
......
718 869
 void OF_finalize_pci_host (void *dev, int first_bus, int nb_busses)
719 870
 {
720 871
     OF_env_t *OF_env;
721
@@ -2145,10 +2191,12 @@
872
@@ -2145,10 +2218,12 @@
722 873
     regs[0].address = first_bus;
723 874
     regs[0].size = nb_busses;
724 875
     OF_property_new(OF_env, dev, "bus-range", regs, sizeof(OF_regprop_t));
......
732 883
 {
733 884
     OF_env_t *OF_env;
734 885
     pci_reg_prop_t pregs[6], rregs[6];
735
@@ -2156,6 +2204,7 @@
886
@@ -2156,6 +2231,7 @@
736 887
     int i, j, k;
737 888
 
738 889
     OF_env = OF_env_main;
......
740 891
     if (regions[0] != 0x00000000)
741 892
         OF_prop_int_set(OF_env, dev, "address", regions[0] & ~0x0000000F);
742 893
     for (i = 0, j = 0, k = 0; i < 6; i++) {
743
@@ -2222,7 +2271,22 @@
894
@@ -2222,7 +2298,22 @@
744 895
     } else {
745 896
         OF_property_new(OF_env, dev, "assigned-addresses", NULL, 0);
746 897
     }
......
764 915
     {
765 916
         OF_prop_t *prop_name = ((OF_node_t *)dev)->prop_name;
766 917
 
767
@@ -2390,6 +2454,54 @@
918
@@ -2390,6 +2481,54 @@
768 919
     return 0;
769 920
 }
770 921
 
......
819 970
 void OF_finalize_pci_macio (void *dev, uint32_t base_address, uint32_t size,
820 971
                             void *private_data)
821 972
 {
822
@@ -2398,6 +2510,8 @@
973
@@ -2398,6 +2537,8 @@
823 974
     pci_reg_prop_t pregs[2];
824 975
     OF_node_t *mio, *chs, *als;
825 976
     uint16_t pic_phandle;
......
828 979
 
829 980
     OF_DPRINTF("mac-io: %p\n", dev);
830 981
     OF_env = OF_env_main;
831
@@ -2416,10 +2530,14 @@
982
@@ -2416,10 +2557,14 @@
832 983
     mio = dev;
833 984
     mio->private_data = private_data;
834 985
     pregs[0].addr.hi = 0x00000000;
......
844 995
     OF_property_new(OF_env, mio, "ranges",
845 996
                     &pregs, sizeof(pci_reg_prop_t));
846 997
 #if 0
847
@@ -2431,8 +2549,49 @@
998
@@ -2431,8 +2576,32 @@
848 999
     OF_property_new(OF_env, mio, "assigned-addresses",
849 1000
                     &pregs, sizeof(pci_reg_prop_t));
850 1001
 #endif
851
-    /* OpenPIC */
852
+
853
+    switch(arch) {
854
+    default:
855
+    case ARCH_MAC99:
856
+        OF_prop_int_new(OF_env, mio, "#interrupt-cells", 2);
857
+        OF_prop_string_new(OF_env, mio, "model", "AAPL,Keylargo");
858
+        OF_prop_string_new(OF_env, mio, "compatible", "Keylargo");
859
+        break;
860
+    case ARCH_HEATHROW:
861
+        OF_prop_int_new(OF_env, mio, "#interrupt-cells", 1);
862
+        OF_prop_string_new(OF_env, mio, "model", "AAPL,343S1211");
863
     {
864
+            const char str[] = "paddington\0heathrow";
865
+            OF_property_new(OF_env, mio, "compatible", str, sizeof(str));
866
+        }
867
+        break;
868
+    }
869 1002
+
870 1003
+    if (arch == ARCH_HEATHROW) {
871 1004
+        /* Heathrow PIC */
......
891 1024
+        OF_node_put(OF_env, mpic);
892 1025
+        rec_len = 6;
893 1026
+    } else {
894
+        /* OpenPIC */
1027
     /* OpenPIC */
1028
-    {
895 1029
         OF_regprop_t regs[4];
896 1030
         OF_node_t *mpic;
897 1031
         mpic = OF_node_new(OF_env, mio, "interrupt-controller", 0x40000);
898
@@ -2455,8 +2614,37 @@
1032
@@ -2455,8 +2624,37 @@
899 1033
         pic_phandle = OF_pack_handle(OF_env, mpic);
900 1034
         OF_prop_int_new(OF_env, chs, "interrupt-controller", pic_phandle);
901 1035
         OF_node_put(OF_env, mpic);
......
934 1068
     /* escc is usefull to get MacOS X debug messages */
935 1069
     {
936 1070
         OF_regprop_t regs[8];
937
@@ -2645,85 +2833,12 @@
1071
@@ -2645,85 +2843,12 @@
938 1072
         OF_node_put(OF_env, scc);
939 1073
     }
940 1074
 #endif
......
1025 1159
     /* Timer */
1026 1160
     {
1027 1161
         OF_node_t *tmr;
1028
@@ -2746,10 +2861,11 @@
1162
@@ -2746,10 +2871,11 @@
1029 1163
                         regs, sizeof(OF_regprop_t));
1030 1164
         OF_node_put(OF_env, tmr);
1031 1165
     }
......
1038 1172
         OF_regprop_t regs[1];
1039 1173
 #if 0 // THIS IS A HACK AND IS COMPLETELY ABSURD !
1040 1174
       // (but needed has Qemu doesn't emulate via-pmu).
1041
@@ -2773,14 +2889,21 @@
1175
@@ -2773,14 +2899,21 @@
1042 1176
         regs[0].size = 0x00002000;
1043 1177
         OF_property_new(OF_env, via, "reg", regs, sizeof(OF_regprop_t));
1044 1178
         OF_prop_int_new(OF_env, via, "interrupt-parent", pic_phandle);
......
1061 1195
         /* ADB pseudo-device */
1062 1196
         adb = OF_node_new(OF_env, via, "adb", OF_ADDRESS_NONE);
1063 1197
         if (adb == NULL) {
1064
@@ -2797,9 +2920,26 @@
1198
@@ -2797,9 +2930,26 @@
1065 1199
         OF_prop_int_new(OF_env, adb, "#size-cells", 0);
1066 1200
         OF_pack_get_path(OF_env, tmp, 512, adb);
1067 1201
         OF_prop_string_new(OF_env, als, "adb", tmp);
......
1091 1225
         
1092 1226
         rtc = OF_node_new(OF_env, via, "rtc", OF_ADDRESS_NONE);
1093 1227
         if (rtc == NULL) {
1094
@@ -2813,14 +2953,55 @@
1228
@@ -2813,14 +2963,68 @@
1095 1229
         OF_prop_string_new(OF_env, rtc, "compatible", "rtc");
1096 1230
 #endif
1097 1231
         OF_node_put(OF_env, rtc);
......
1108 1242
+        OF_node_put(OF_env, pmgt);
1109 1243
+    }
1110 1244
+
1245
+    if (arch == ARCH_HEATHROW) {
1246
+        /* NVRAM */
1247
+        OF_node_t *nvr;
1248
+        OF_regprop_t regs;
1249
+        nvr = OF_node_new(OF_env, mio, "nvram", 0x60000);
1250
+        OF_prop_string_new(OF_env, nvr, "device_type", "nvram");
1251
+        regs.address = 0x60000;
1252
+        regs.size = 0x00020000;
1253
+        OF_property_new(OF_env, nvr, "reg", &regs, sizeof(regs));
1254
+        OF_prop_int_new(OF_env, nvr, "#bytes", 0x2000);
1255
+        OF_node_put(OF_env, nvr);
1256
+    }
1257
+
1111 1258
  out:
1112 1259
     //    OF_node_put(OF_env, mio);
1113 1260
     OF_node_put(OF_env, chs);
......
1148 1295
 /*****************************************************************************/
1149 1296
 /* Fake package */
1150 1297
 static void OF_method_fake (OF_env_t *OF_env)
1151
@@ -2862,11 +3043,11 @@
1298
@@ -2862,11 +3066,11 @@
1152 1299
     /* As we get a 1:1 mapping, do nothing */
1153 1300
     ihandle = popd(OF_env);
1154 1301
     args = (void *)popd(OF_env);
......
1160 1307
+    size = popd(OF_env);
1161 1308
+    virt = popd(OF_env);
1162 1309
+    address = popd(OF_env);
1163
+    dprintf("map %0x %0x %0x %0x\n", ihandle, address,
1310
+    OF_DPRINTF("Map %0x %0x %0x %0x\n", ihandle, address,
1164 1311
                virt, size);
1165 1312
     pushd(OF_env, 0);
1166 1313
 }
1167
@@ -3270,7 +3451,7 @@
1314
@@ -3270,7 +3474,7 @@
1168 1315
     OF_prop_string_new(OF_env, dsk, "device_type", "block");
1169 1316
     OF_prop_string_new(OF_env, dsk, "category", type);
1170 1317
     OF_prop_int_new(OF_env, dsk, "device_id", devnum);
......
1173 1320
     OF_method_new(OF_env, dsk, "open", &OF_blockdev_open);
1174 1321
     OF_method_new(OF_env, dsk, "seek", &OF_blockdev_seek);
1175 1322
     OF_method_new(OF_env, dsk, "read", &OF_blockdev_read);
1176
@@ -3432,7 +3613,8 @@
1323
@@ -3432,7 +3636,8 @@
1177 1324
 }
1178 1325
 
1179 1326
 void OF_vga_register (const unsigned char *name, unused uint32_t address,
......
1183 1330
 {
1184 1331
     OF_env_t *OF_env;
1185 1332
     unsigned char tmp[OF_NAMELEN_MAX];
1186
@@ -3504,6 +3686,18 @@
1333
@@ -3504,6 +3709,18 @@
1187 1334
     OF_prop_string_new(OF_env, als, "display", tmp);
1188 1335
     OF_node_put(OF_env, als);
1189 1336
     /* XXX: may also need read-rectangle */
......
1202 1349
  out:
1203 1350
     OF_node_put(OF_env, disp);
1204 1351
 }
1205
@@ -4451,7 +4645,10 @@
1352
@@ -4451,7 +4668,10 @@
1206 1353
         break;
1207 1354
     case 0x233441d3: /* MacOS X 10.2 and OpenDarwin 1.41 */
1208 1355
         /* Create "memory-map" pseudo device */
......
1214 1361
         /* Find "/packages" */
1215 1362
         chs = OF_pack_find_by_name(OF_env, OF_node_root, "/chosen");
1216 1363
         if (chs == NULL) {
1217
@@ -4459,10 +4656,6 @@
1364
@@ -4459,10 +4679,6 @@
1218 1365
             ERROR("Cannot get '/chosen'\n");
1219 1366
             break;
1220 1367
         }
......
1225 1372
             map = OF_node_new(OF_env, chs, "memory-map", OF_ADDRESS_NONE);
1226 1373
             if (map == NULL) {
1227 1374
                 pushd(OF_env, -1);
1228
@@ -4473,11 +4666,8 @@
1375
@@ -4473,11 +4689,8 @@
1229 1376
             OF_node_put(OF_env, map);
1230 1377
             OF_node_put(OF_env, chs);
1231 1378
             pushd(OF_env, phandle);
......
1238 1385
         break;
1239 1386
     case 0x32a2d18e: /* MacOS X 10.2 and OpenDarwin 6.02 */
1240 1387
         /* Return screen ihandle */
1241
@@ -4540,9 +4730,10 @@
1388
@@ -4540,9 +4753,10 @@
1242 1389
     case 0x4ad41f2d:
1243 1390
         /* Yaboot: wait 10 ms: sure ! */
1244 1391
         break;
......
1250 1397
         printf("Call %0x NOT IMPLEMENTED !\n", crc);
1251 1398
         bug();
1252 1399
         break;
1400
@@ -4581,6 +4795,7 @@
1401
 {
1402
     OF_CHECK_NBARGS(OF_env, 0);
1403
     /* Should free all OF resources */
1404
+    bd_reset_all();
1405
 #if defined (DEBUG_BIOS)
1406
     {
1407
         uint16_t loglevel = 0x02 | 0x10 | 0x80;
1253 1408
diff -wruN --exclude '*~' --exclude '*.o' --exclude '*.bin' --exclude '*.out' --exclude mkdiff OpenHackWare-release-0.4.org/src/pci.c OpenHackWare-release-0.4/src/pci.c
1254 1409
--- OpenHackWare-release-0.4.org/src/pci.c	2005-03-31 09:23:33.000000000 +0200
1255
+++ OpenHackWare-release-0.4/src/pci.c	2005-07-03 15:52:16.000000000 +0200
1410
+++ OpenHackWare-release-0.4/src/pci.c	2005-07-07 23:27:37.000000000 +0200
1256 1411
@@ -99,8 +99,8 @@
1257 1412
     uint16_t min_grant;
1258 1413
     uint16_t max_latency;
......
1490 1645
     },
1491 1646
     {
1492 1647
         0x1057, 0x4801, NULL,
1493
@@ -1446,8 +1531,10 @@
1494
     /* Apple Mac-io controller */
1648
@@ -1443,7 +1528,14 @@
1649
 }
1650
 
1651
 static const pci_dev_t misc_pci[] = {
1652
-    /* Apple Mac-io controller */
1653
+    /* Paddington Mac I/O */
1654
+    { 
1655
+        0x106B, 0x0017,
1656
+        "mac-io", "mac-io", "AAPL,343S1211", "paddington\1heathrow",
1657
+        1, 1, 1,
1658
+        &macio_config_cb, NULL,
1659
+    },
1660
+    /* KeyLargo Mac I/O */
1495 1661
     { 
1496 1662
         0x106B, 0x0022,
1497
-        "mac-io", "mac-io", "AAPL,Keylargo", "Keylargo",
1498
-        1, 1, 2,
1499
+        /* model, compatible and #interrupt-cells fields are filled in
1500
+           of.c */
1501
+        "mac-io", "mac-io", NULL, NULL,
1502
+        1, 1, 0,
1503
         &macio_config_cb, NULL,
1504
     },
1505
     {
1506
@@ -1599,7 +1686,7 @@
1663
         "mac-io", "mac-io", "AAPL,Keylargo", "Keylargo",
1664
@@ -1599,7 +1691,7 @@
1507 1665
                                       uint8_t min_grant, uint8_t max_latency,
1508 1666
                                       int irq_line)
1509 1667
 {
......
1512 1670
     int i;
1513 1671
 
1514 1672
     device->min_grant = min_grant;
1515
@@ -1611,22 +1698,28 @@
1673
@@ -1611,22 +1703,28 @@
1516 1674
         printf("MAP PCI device %d:%d to IRQ %d\n",
1517 1675
                device->bus, device->devfn, irq_line);
1518 1676
     }
......
1545 1703
         }
1546 1704
     }
1547 1705
 }
1548
@@ -1900,7 +1993,7 @@
1706
@@ -1900,7 +1998,7 @@
1549 1707
         goto out;
1550 1708
     }
1551 1709
     ret = (pci_u_t *)newd;
......
1554 1712
     /* register PCI device in OF tree */
1555 1713
     if (bridge->dev.common.type == PCI_FAKE_BRIDGE) {
1556 1714
         newd->common.OF_private =
1557
@@ -1927,6 +2020,9 @@
1715
@@ -1927,6 +2025,9 @@
1558 1716
             /* Handle 64 bits memory mapping */
1559 1717
             continue;
1560 1718
         }
......
1564 1722
         addr = 0x10 + (i * sizeof(uint32_t));
1565 1723
         /* Get region size
1566 1724
          * Note: we assume it's always a power of 2
1567
@@ -1935,7 +2031,7 @@
1725
@@ -1935,7 +2036,7 @@
1568 1726
         smask = pci_config_readl(bridge, bus, devfn, addr);
1569 1727
         if (smask == 0x00000000 || smask == 0xFFFFFFFF)
1570 1728
             continue;
......
1573 1731
             /* I/O space */
1574 1732
             base = io_base;
1575 1733
             /* Align to a minimum of 256 bytes (arbitrary) */
1576
@@ -1947,6 +2043,8 @@
1734
@@ -1947,6 +2048,8 @@
1577 1735
             /* Align to a minimum of 64 kB (arbitrary) */
1578 1736
             min_align = 1 << 16;
1579 1737
             amask = 0x0000000F;
......
1582 1740
         }
1583 1741
         omask = smask & amask;
1584 1742
         smask &= ~amask;
1585
@@ -1980,7 +2078,10 @@
1743
@@ -1980,7 +2083,10 @@
1586 1744
     if (irq_pin > 0) {
1587 1745
         /* assign the IRQ */
1588 1746
         irq_pin = ((devfn >> 3) + irq_pin - 1) & 3;
......
1594 1752
             int elcr_port, val;
1595 1753
             irq_line = prep_pci_irqs[irq_pin];
1596 1754
             /* set the IRQ to level-sensitive */
1597
@@ -1988,14 +2089,22 @@
1755
@@ -1988,14 +2094,22 @@
1598 1756
             val = inb(elcr_port);
1599 1757
             val |= 1 << (irq_line & 7);
1600 1758
             outb(elcr_port, val);
......
1619 1777
     /* Call special inits if needed */
1620 1778
     if (dev->config_cb != NULL)
1621 1779
         (*dev->config_cb)(newd);
1622
@@ -2049,6 +2158,32 @@
1780
@@ -2049,6 +2163,32 @@
1623 1781
     case ARCH_CHRP:
1624 1782
         /* TODO */
1625 1783
         break;
......
1652 1810
     case ARCH_MAC99:
1653 1811
         dev = pci_find_device(0x06, 0x00, 0xFF, checkv, checkp);
1654 1812
         if (dev == NULL)
1655
@@ -2167,6 +2302,30 @@
1813
@@ -2167,6 +2307,30 @@
1656 1814
     case ARCH_CHRP:
1657 1815
         /* TODO */
1658 1816
         break;

Also available in: Unified diff