The various weight configurations on a Substrate chain are all collected in a blockWeights
configuration constant which can be found in the System Pallet.

You can see in the image above the Kusama network has a maxBlock
configured to 2_000_000_000_000
which is equivalent to "2 seconds of weight".
This is generated via a builder pattern defined here:
https://github.com/paritytech/substrate/blob/master/frame/system/src/limits.rs
In the Substrate node, you can find the builder definition inside the Runtime configuration:
pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()
.base_block(BlockExecutionWeight::get())
.for_class(DispatchClass::all(), |weights| {
weights.base_extrinsic = ExtrinsicBaseWeight::get();
})
.for_class(DispatchClass::Normal, |weights| {
weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);
})
.for_class(DispatchClass::Operational, |weights| {
weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);
// Operational transactions have some extra reserved space, so that they
// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.
weights.reserved = Some(
MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT
);
})
.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)
.build_or_panic();
Obviously a lot of assumptions happening here in the background to calculate all these different weight values, but this is the source of that logic.