Hello Joursoir,

Nice to have you very interested in flashrom!
One thing I wanted to say: it would be great to include the mailing list if you have discussions about the project. That would mean the community can join and potentially help too, and this is really useful.

Thomas, thank you so much for replying, this is awesome! :)


On Sat, Mar 19, 2022 at 2:43 AM Thomas Heijligen <src@posteo.de> wrote:
Hi Joursoir,

The idea for the "Restructure Shutdown Functions" project is to extend
the struct programmer_entry with a function to handle programmer
related shutdowns. Currently, the init function of each programmer
calls, mostly indirect, register_shutdown on each item  separately to
handle its shutdown later. In this project, the state tracking and
shutdown of the programmer own data should be moved to each programmer.

E.g.:
const struct programmer_entry example_programmer = {
    ...
    .init = example_init,
    .shutdown = example_shutdown,
};

struct example_data {
    int reg_a;
};

static int example_init(struct example_data* data)
{
    ...
    // keep track of the original value
    data->reg_a = pci_read_word(dev, PCI_MAGIC_ADDR, PCI_MAGIC_VALUE);
    // write new value
    pci_write_word(dev, PCI_MAGIC_ADDR, 0x42);
}

static int example_shutdown(struct example_data* data)
{
    // restore the original value
    pci_write_word(dev, PCI_MAGIC_ADDR, data->reg_a);
}

Feel free to contact me if you have further questions.

-- Thomas

On Fri, 2022-03-18 at 17:46 +0300, Joursoir wrote:
> Good day,
>
> I am a student and very interested in flashrom. I fit the description
> of experienced C programmer. Open-source and low-level programming
> are
> my interests. I already have real experience with flashrom (CH341A
> programmer + chip "MX25L6436E") and want to become a GSoC 2022
> contributor in this project.
>
> I find the "Restructure Shutdown Function" project interestring to
> me.
> But right now it has no mentors. Maybe someone from the mailing can
> help me.
>
> I have gone through sources and understand how things are now. The
> project description says "have a defined shutdown function in the
> programmer API". But we already have it. It's programmer_shutdown().
> Or no?
>
> The first and easiest thing that comes to my mind is to refuse using
> callbacks and use enums, thusly:
>
> enum shutdown_func {
>     SERPROG = 1 << 0,
>     SPI = 1 << 1,
>     ...
> };
>
> int programmer_shutdown(enum shutdown_func execfunc)
> {
>     ...
>
>     if(execfunc & SERPROG)
>         ret |= serprog_shutdown(...);
>
>     if(execfunc & SPI) {
>         /* the problem is that SPI programmers have own shutdown
> funcs,
>            like dlc5_shutdown, byteblaster_shutdown,
> stlinkv3_spi_shutdown,
>            so use struct spi_master, that contains shutdown callback
> */
>         ret |= spi_master_shutdown(...);
>     }
>
>     ...
> }
>
> This system has disadvantages, but it'll make easier to track the
> code
> flow. What are the potential problems in this implementation?
>
> What's with struct flashrom_programmer? Is not implemented yet?
>
> I would appreciate any feedback.
>
> --
> Joursoir
> _______________________________________________
> flashrom mailing list -- flashrom@flashrom.org
> To unsubscribe send an email to flashrom-leave@flashrom.org

_______________________________________________
flashrom mailing list -- flashrom@flashrom.org
To unsubscribe send an email to flashrom-leave@flashrom.org


--
Anastasia.