linux 2.6.21.7

where do serial 8250 port fill its membase and mapbase  fileds  in
system initializing ?



I found that , when calling do_initcalls--->  serial8250_init ---->
platform_driver_register--->bus_for_each_dev,  system found

an device of serial 8250, which has already fill the membase and mapbase fileds.

That is to say,  before serial8250_init ---->
platform_driver_register, system has create a serial device with
membase and mapbase initialized.

 do_initcalls--->  serial8250_init ----> platform_driver_register--->
dev = bus_for_each_dev


             --->  struct plat_serial8250_port *p = dev->platform_data;

                    /*  at this point , p->membase and p->mapbase are
all assigned with proper value by system */




I searched the whole source code with keyword 'membase' , and found
the following code :


serial8250_request_std_resource:

case UPIO_MEM:
        if (!up->port.mapbase)
                break;

        if (!request_mem_region(up->port.mapbase, size, "serial")) {
                ret = -EBUSY;
                break;
        }
  /*I guess membase is generated according to mapbase ,*
    so I add some debug print  here.
    However, I found membase and mapbase are already initialized
before these codes. */


                if (up->port.flags & UPF_IOREMAP) {
                         up->port.membase = ioremap(up->port.mapbase, size);
                         if (!up->port.membase) {
                          release_mem_region(up->port.mapbase, size);
                          ret = -ENOMEM;
                         }
                 }


So I am really confused with serial 8250
initializing----------------where do kernel apply membase and mapbase
filed to  8250 port?

Thx
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to