1*0d6140beSAndroid Build Coastguard Worker /* Copyright 2018 The Chromium OS Authors. All rights reserved. 2*0d6140beSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*0d6140beSAndroid Build Coastguard Worker * found in the LICENSE file. 4*0d6140beSAndroid Build Coastguard Worker */ 5*0d6140beSAndroid Build Coastguard Worker #ifndef __FLASHROM_ACTION_DESCRIPTOR_H 6*0d6140beSAndroid Build Coastguard Worker #define __FLASHROM_ACTION_DESCRIPTOR_H 7*0d6140beSAndroid Build Coastguard Worker 8*0d6140beSAndroid Build Coastguard Worker #include <stddef.h> 9*0d6140beSAndroid Build Coastguard Worker #include <stdint.h> 10*0d6140beSAndroid Build Coastguard Worker #include <stdbool.h> 11*0d6140beSAndroid Build Coastguard Worker 12*0d6140beSAndroid Build Coastguard Worker /* 13*0d6140beSAndroid Build Coastguard Worker * Structure containing information about the processing flashrom is supposed 14*0d6140beSAndroid Build Coastguard Worker * to perform on the current run. 15*0d6140beSAndroid Build Coastguard Worker * 16*0d6140beSAndroid Build Coastguard Worker * The variable size 'processing_units' array contains description of 17*0d6140beSAndroid Build Coastguard Worker * processing to the flash block granularity. 18*0d6140beSAndroid Build Coastguard Worker */ 19*0d6140beSAndroid Build Coastguard Worker struct action_descriptor { 20*0d6140beSAndroid Build Coastguard Worker void *oldcontents; 21*0d6140beSAndroid Build Coastguard Worker void *newcontents; 22*0d6140beSAndroid Build Coastguard Worker struct processing_unit { 23*0d6140beSAndroid Build Coastguard Worker size_t block_size; /* Block size granularity of this unit. */ 24*0d6140beSAndroid Build Coastguard Worker size_t offset; /* Offset of the first block. */ 25*0d6140beSAndroid Build Coastguard Worker size_t num_blocks; /* Number of consecutive blocks. Value of 26*0d6140beSAndroid Build Coastguard Worker * zero indicates the last entry in the 27*0d6140beSAndroid Build Coastguard Worker * processing_units array. */ 28*0d6140beSAndroid Build Coastguard Worker int block_eraser_index; /* Index into 'block_erasers'. */ 29*0d6140beSAndroid Build Coastguard Worker int block_region_index; /* Index into 'eraseblocks'. */ 30*0d6140beSAndroid Build Coastguard Worker } processing_units[0]; 31*0d6140beSAndroid Build Coastguard Worker }; 32*0d6140beSAndroid Build Coastguard Worker 33*0d6140beSAndroid Build Coastguard Worker /* Forward reference for the flash descriptor structure defined in flash.h. */ 34*0d6140beSAndroid Build Coastguard Worker struct flashrom_flashctx; 35*0d6140beSAndroid Build Coastguard Worker #define flashctx flashrom_flashctx /* TODO: Agree on a name and convert all occurences. */ 36*0d6140beSAndroid Build Coastguard Worker 37*0d6140beSAndroid Build Coastguard Worker /* 38*0d6140beSAndroid Build Coastguard Worker * Function to create an action descriptor based on the 'before' and 'after' 39*0d6140beSAndroid Build Coastguard Worker * flash contents. 40*0d6140beSAndroid Build Coastguard Worker */ 41*0d6140beSAndroid Build Coastguard Worker struct action_descriptor *prepare_action_descriptor(struct flashctx *flash, 42*0d6140beSAndroid Build Coastguard Worker void *oldcontents, 43*0d6140beSAndroid Build Coastguard Worker void *newcontents); 44*0d6140beSAndroid Build Coastguard Worker 45*0d6140beSAndroid Build Coastguard Worker /* 46*0d6140beSAndroid Build Coastguard Worker * Returns if the op should be consider a dry-run and return early or not. 47*0d6140beSAndroid Build Coastguard Worker * 48*0d6140beSAndroid Build Coastguard Worker * This function is set to indicate that the invoked flash programming 49*0d6140beSAndroid Build Coastguard Worker * command should not be executed, but just verified for validity. 50*0d6140beSAndroid Build Coastguard Worker * 51*0d6140beSAndroid Build Coastguard Worker * This is useful when one needs to determine if a certain flash erase command 52*0d6140beSAndroid Build Coastguard Worker * supported by the chip is allowed by the Intel controller on the device. 53*0d6140beSAndroid Build Coastguard Worker */ 54*0d6140beSAndroid Build Coastguard Worker bool is_dry_run(void); 55*0d6140beSAndroid Build Coastguard Worker 56*0d6140beSAndroid Build Coastguard Worker /* 57*0d6140beSAndroid Build Coastguard Worker * A function to test action descriptor implementation, returns number of 58*0d6140beSAndroid Build Coastguard Worker * failures. 59*0d6140beSAndroid Build Coastguard Worker */ 60*0d6140beSAndroid Build Coastguard Worker int test_action_descriptor(void); 61*0d6140beSAndroid Build Coastguard Worker 62*0d6140beSAndroid Build Coastguard Worker #endif /* ! __FLASHROM_ACTION_DESCRIPTOR_H */ 63